【发布时间】:2023-03-26 02:40:01
【问题描述】:
我有一个模板类:
template <class T>
class Wrapper {
public:
Wrapper() {};
Wrapper(const T& object) : mObject(object){ };
template <class F, class... Args >
typename void operation(const F& f, Args... args)
{
std::cout << "intercept";
(mobject.*f)(args...);
}
private:
T mObject;
};
那我就这么用了:
struct thing{
void doSomething(char c) { cout << "dosomething on " << c; };
};
Wrapper<thing> p;
p.operation(&thing::doSomething, 'g');
这很好,并输出“Intercept then dosomething on g”。然后,如果我尝试像这样使用 Wrapper 的其他构造函数:
Wrapper<thing> p2(thing());
p2.operation(&thing::doSomething, 'f');
VS2013 在我尝试在 p2 上调用某些内容的行上给出了编译失败。它说操作的左边不是类/结构/联合。
嗯?我错过了什么明显的东西吗?
【问题讨论】:
标签: c++ templates c++11 constructor visual-studio-2013