目前我有一个看起来像这样的模板类:
template<typename T, T value>
struct MyStruct{
/* Stuff */
};
目前为了实例化它,我做了这样的事情:
typedef MyStruct<int, 123> struct_def;
我想做这样的事情:
typedef typename MagicTemplate<123>::type struct_def;
这将解析为 MyStruct<int,123>
....
所以我的问题是如何从模板参数中获取类型和值信息?
编辑:
如果解决方案可以与指针、成员指针、函数指针等一起使用,那就太好了......
例如:
struct OtherStruct{
int memberA;
long memberB;
void foo(void);
};
static OtherStruct instance;
//Expands to MyStruct<memberA OtherStruct::*, &OtherStruct::memberA>
typedef typename MagicTemplate<&OtherStruct::memberA>::type struct_defA;
//Expands to MyStruct<OtherStruct*,&instance>
typedef typename MagicTemplate<&instance>::type struct_defB;
//Expands to MyStruct<void (OtherStruct::*)(void),&OtherStruct::foo>
typedef typename MagicTemplate<&OtherStruct::foo>::Type struct_defC;
最佳答案
您可以等待 C++17。
或者你下注;拿个类型T
,那T
预计与 std::integral_constant
兼容.这将 jar 踢得更远了;但是制作特定类型的快捷方式integral_constant
s 比制作一些定制模板实例的更干净。
例如,我可以制作123_k
类型为 std::integral_constant<int,123>
.做MyStruct<decltype(123_k)>
.
作为奖励,您的 MyStruct
现在匹配 template<class...>
这使得某些元编程更容易。
关于c++ - 如何从模板中获取类型和值信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427483/