c++ - 如何从模板中获取类型和值信息

标签 c++ templates

目前我有一个看起来像这样的模板类:

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/

相关文章:

c++ - 函数的 C/C++ 内存管理

c++ - 使用成员函数调用可变参数模板函数

C++模板类,具体情况如何声明拷贝构造函数?

c++ - reference_wrapper : make_pair VS Class Template Argument Deduction (CTAD)

c++ - 为什么可以使用额外参数调用 Boost.Bind 函数?

c++ - 混合使用不同编译器版本构建的二进制文件

c++ - vector::operator[] 开销

c++ - visual studio 2012 中 Eigen 类型 vector 的自动向量化表现不佳

templates - 如何在外部文件中定义 Handlebar.js 模板

C++ 模板 : cannot call my function from main. cpp