指针到成员作为模板参数推导
Pointer-to-member as template parameter deduction
我想将指向成员的指针作为指向 foo1 的模板参数。这是代码:
struct baz{
int qux;
};
template<typename C, typename T, T C::*m>
struct foo1{};
template<typename C, typename T>
void barr2(T C::*m){
}
template<typename C, typename T>
void barr1(T C::*m){
barr2(m); // ok
foo1<C, T, &baz::qux> _; // ok
foo1<C, T, m> f; // g++4.6.1 error here; how to pass 'm' correctly ?
}
int main(){
barr1(&baz::qux);
}
那么它应该是什么样子的呢?
它对您不起作用,因为您正在尝试在编译时表达式中使用运行时信息。这与使用从控制台读取的整数来专门化模板相同。它不是为了工作。
它不一定能解决你的问题,但如果barr1
函数的目的是减轻打字负担,这样的东西可能对你有用:
struct baz{
int qux;
};
template<typename C, typename T, T C::*m>
struct foo1 {};
#define FOO(Class, Member)
foo1<Class, decltype(Class::Member), &Class::Member>
int main(){
FOO(baz, qux) f;
}
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 如何将lambda作为模板类的成员函数参数
- 将成员函数指针作为参数传递给模板方法
- c++构造函数成员初始化:传递参数
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- C++向量默认为成员参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 绑定到可变参数成员函数
- C/C++ 包含点的宏参数(成员访问运算符)
- 将const char * const参数成员分配给新值
- 基于模板参数成员函数参数的模板专用化
- 如何访问可变参数成员
- 可变类参数成员变量的异构存储
- 非模板类中的可变参数成员