यहाँ एक संस्करण है कि सबसे बड़ा प्रकार ले जाएगा है, लेकिन पिछले प्रकार के पक्ष में संबंधों टूट जाता है:
template<bool, typename, typename>
struct pick_type;
template<typename T, typename U>
struct pick_type<true,T,U> {
typedef T type;
};
template<typename T, typename U>
struct pick_type<false,T,U> {
typedef U type;
};
template<typename...>
struct largest;
template<typename T>
struct largest<T> {
typedef T type;
};
template<typename T, typename... U>
struct largest<T, U...> {
typedef typename largest<U...>::type tailtype;
typedef typename pick_type<
(sizeof(T)>sizeof(tailtype)),
T,
tailtype
>::type type;
};
यहाँ उदाहरण कोड है:
#include <iostream>
using namespace std;
void foo(double) { cout << "double\n"; }
void foo(int) { cout << "int\n"; }
void foo(char) { cout << "char\n"; }
void foo(bool) { cout << "bool\n"; }
void foo(float) { cout << "float\n"; }
int main() {
foo(largest<int,double,char,bool,float>::type{});
}
स्रोत
2013-05-29 01:07:18
Yay, मुझे लगता है कि मैं थी की लटका पाने के लिए शुरू कर सामान की तरह। +1। – chris