gpt4 book ai didi

c++ - 模板类奇怪的行为 VS2013

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:48 41 4
gpt4 key购买 nike

我有一个模板类:

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 上调用某些内容的那一行给出了编译失败。它说操作的左边不是类/结构/union 。

嗯?我是否遗漏了一些明显的东西?

最佳答案

这声明了一个函数 p2 :

Wrapper<thing> p2(thing());

返回 Wrapper<thing>并且有一个类型为 thing(*)() 的未命名参数.你需要:

Wrapper<thing> p2((thing()));

thing t;
Wrapper<thing> p2(t);

关于c++ - 模板类奇怪的行为 VS2013,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801263/

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