我有一个模板类:
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');
很好,然后输出“在g上进行拦截然后做某事”。然后,如果我尝试像这样使用Wrapper的另一个构造函数:
Wrapper<thing> p2(thing());
p2.operation(&thing::doSomething, 'f');
VS2013在尝试在p2上调用某些内容的行上出现了编译失败。它说操作的左边不是类/结构/联合。
?? 我是否缺少明显的东西?
这声明了一个函数p2
:
Wrapper<thing> p2(thing());
它返回Wrapper<thing>
并具有一个类型为的未命名参数thing(*)()
。你需要:
Wrapper<thing> p2((thing()));
要么
thing t;
Wrapper<thing> p2(t);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句