我陷入了麻烦,因为我应该在模板中引用参数(老实说,我强烈怀疑它不可能实现我想要做的事)。从另一个参数引用的模板可变参数
它遵循想什么,我做的一个例子(当然,这在语法上不合法的,其目的是给知道哪些是目标):
template<class C, Ret(C::*Member)(Params...), typename Ret, typename... Params>
class MyClass { }
在其他方面,我想引用一个类的成员,同时指定返回值和该方法的参数。
不幸的是,我看这样做是像下面这样一个唯一的方法(当然,它确实依赖于在需要那些typenames,无论如何,它可能是一个有意义的例子):
template<typename Ret, typename... Params>
class MyClass {
public:
template<class C, Ret(C::*Member)(Params...)>
MyClass(C *c) { /* do something else and give sense to this class */ }
}
除了上面的那个,即通过引入一个模板化的构造函数来打破交错,那么存在另一种有效的方法来获得与唯一的类模板签名相同的结果?
我知道(很简单)如何实现在没有可变参数模板的情况下(作为一个例子,移动Ret
Member
之前),但一个可变一个(Params
)在模板列表和我的结束奠定不能以任何方式引用它。
为什么你要显式传递所有类型,而不是使用'typename T,T t'方法,然后'decltype(&C :: member),&C :: member'? –
我不想绑定到特定的成员,但只绑定到合同,因此我必须明确定义哪个模板是目标成员。按照你的方法,我将被迫在我的课堂中定义一个具有众所周知的名字和原型的成员,不是吗?此外,这是解决问题的另一种解决方案,而不是对我的问题的回应。 :-) – skypjack
那么为什么你需要'成员'作为非类型的模板参数?是不是一个足够的签名?是[this](http://coliru.stacked-crooked.com/a/b0d3947a79be7738)你需要什么? –