在模板化类的模板化方法中重载std :: function参数

时间:2017-05-07 11:35:29

标签: c++ c++11 templates template-specialization

我无法在类模板专业化中为模板化方法制作专门的模板。

假设我有以下代码:

#include <functional>

template<typename T>
class myClass {
public:
    T bar() {
        return T();
    }

    template<typename P>
    bool foo(std::function<P(T)> g) {
        g(bar());
        return true;
    }
};

如果我想为bar专门设定myClass<void>函数,我会这样做:

template<> void myClass<void>::bar() {

}

但是当我尝试以同样的方式专门化foo时,我收到一个编译错误,说error: invalid parameter type ‘void’并指向foo的原始定义。

template<>
template<typename P>
bool myClass<void>::foo(std::function<P(void)> g) {
    bar();
    g();
    return true;
}

有人有任何建议吗,我做错了什么?

0 个答案:

没有答案