gpt4 book ai didi

c++ - 作为可变模板参数的方法

转载 作者:行者123 更新时间:2023-11-28 03:25:07 25 4
gpt4 key购买 nike

我正在尝试扩展该技术解释的方法 here对于功能。问题是方法签名模板参数。例如,以这种方式创建 sin 函数的包装器:

template<typename Sig, Sig& S> struct wrapper;

template<typename Ret, typename... Args, Ret(&P)(Args...)>
struct wrapper<Ret(Args...), P> {
// blah
}

然后实例化为

wrapper<decltype(sin), sin>

但是对于方法bool Foo::blah(int),这种技术被拒绝了:

template<class C, typename Sig, Sig& S> struct wrapper;

template<class C, typename Ret, typename... Args, Ret(C::*P)(Args...)>
struct wrapper<Ret(C::)(Args...), P> {
// blah
}

wrapper<decltype(Foo::blah), &Foo::blah>

那么正确的语法是什么?

最佳答案

成员函数没有自由函数类型的类似物。您需要直接使用指向成员函数的指针。

尝试这样的事情:

template <typename C, typename MFP, MFP> struct wrapper;

template <typename C, typename R, typename ...Args, R (C::*MFP)(Args...)>
struct wrapper<C, R (C::*)(Args...), MFP>
{
// ...
};

请注意,如果您想承认 CV 和右值限定的所有可能组合,这会变得有点冗长。

关于c++ - 作为可变模板参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com