类型OR模板参数的模板特化

时间:2015-01-19 00:37:57

标签: templates c++11 template-specialization

我有一个类,它枚举模板类型的一个或多个类型的成员符号。我使用宏来克服C ++符号的缺点,以抽象出一个正交使用的类型的符号。因为我可以直接访问符号抽象,所以操作对象的性质大多无关紧要。

示例用法是:

struct MyNonTemplatedStruct
  { int Num; float FloatNum; };

template< typename SomeType >
struct MyTemplatedStruct
  { int Count; SomeType Object;  };


mDeclareRTTI_Type( MyNonTemplatedStruct, Num, FloatNum );

mDeclareRTTI_Type( MyTemplatedStruct, Count, Object );

MyRTTClass<MyNonTemplatedStruct> RTTI_N;

MyRTTClass<MyTemplatedStruct> RTTI_T;

cout << RTTI_N.IDName(0);              // "Num"
cout << RTTI_T.IDName(RTTI_T.Object);  // "Object"

typename RTTI_N::ThisType StackMyNonTemplatedStruct;

auto HeapMyTemplatedStruct = RTTI_T.New<float>();

目前我必须拥有我的mDeclareRTTI_Type()/ mDeclareRTTI_Type_Templated_Version()的2个版本,因为我无法确定一种声明方式 一个可以适应任一专业化的模板。

template<...> //unrestricted by number, typename or non-type
MyRTTIClass {};

template< typename T>
template<> MyRTTIClass<T> {};

template< template<typename...> class Tmpl >
template<> MyRTTIClass<Tmpl> {};

模板模板参数参数重复相同的难度。即Tmpl&lt;&gt;的模板类型或非类型参数。需要每个组合的签名。我的解决方法是将这些参数限制为typename ...

有没有人知道可以克服其中一个或两个相关限制的包装系统?

这是我关于堆栈溢出的第一个问题,所以我希望我已经为问题的内容和原因提供了足够的信息。此外,升级库太大而无法考虑,但如果库有解决方案,我可以尝试从中提取它,如果我知道它解决了它。

由于

0 个答案:

没有答案