Hello, Is it possible to use the type_traits library to detect if a template type is a template specialization from a specific type. In my case I want to detect the dependency of the endian class from the vault. e.g. something like that: template<typename myType> is_the_type(endian, myType) best regards Hansjörg
Hansi wrote:
Hello,
Is it possible to use the type_traits library to detect if a template type is a template specialization from a specific type.
In my case I want to detect the dependency of the endian class from the vault.
e.g. something like that:
template<typename myType> is_the_type(endian, myType)
You can't tell if an aribrary template is a specialization or the primary template definition, but you can detect specific types with is_same, is that what you wanted to do? John.
John Maddock schrieb:
Hansi wrote:
Hello,
Is it possible to use the type_traits library to detect if a template type is a template specialization from a specific type.
In my case I want to detect the dependency of the endian class from the vault.
e.g. something like that:
template<typename myType> is_the_type(endian, myType)
You can't tell if an aribrary template is a specialization or the primary template definition, but you can detect specific types with is_same, is that what you wanted to do?
no not really. Because I want it to make it generic and I want to detect if a type is a endian type (this implementation which is disussed at the moment in the development forum) and here are a lot of definitions... May be there is another possibility with constraints. Is it possible to detect if the class has the: typedef T value_type and an operator overloading operator() I think this would also solve the problem... Thanks Hansjörg
John.
Just either use MPL HAS_XXX macro or Eric Niebler fast type checking to test if the tempalte Type has the typename you need defined.
Hansi a écrit :
Joel Falcou schrieb:
Just either use MPL HAS_XXX macro or Eric Niebler fast type checking to test if the tempalte Type has the typename you need defined.
What is the Eric Niebler fast type checking? in which library is this?
Check the documentation of Proto, which should be available in the Vault. Basically, here's the gist of how I reused it as a "tag" feature on class I wanted to sort by the fact they have or not some features. Let's say you want to know if type X has some features. You use a small structure called has_feat : struct has_foo { typedef void foo_type; }; Let's say you have two class Bar1 & Bar2. Bar1 has features foo while Bar2 has none. To tag this, make Bar1 inherit from has_foo : class Bar1 : public has_foo { ... }; Now, to check if a given type T has foo features (hence inherits from has_foo), you have to build a simple metafunction : template<class C, class V = void> struct check_for_foo : false_ {}; template<class C> struct check_for_foo<C,typename C::foo_type> : true_ {}; Then, using check_for_foo<T>::type will give you a MPL boolean that tells you if T "has foo" features.
participants (3)
-
Hansi
-
Joel Falcou
-
John Maddock