我意識到這不一定是您想要做的事情,但我碰到類似於前一天的某些代碼。所以,我想看看更多的想法...使用默認構造函數在類中重載()運算符
我有一個類已經重載了一個構造函數和一個仿函數。這按預期工作。然而,當你用默認的構造函數調用一個類,然後嘗試使用函子時,它會失敗(因爲它無法弄清楚如何將類轉換爲int,這不是我想要的)。這樣做的正確方法是什麼?
#include <cstdio>
class foo
{
public:
foo(int a, int b);
foo();
int operator()();
private:
int result;
};
foo::foo(int a, int b)
{
printf("I am a foo(int, int). a: %d b: %d\n", a, b);
result = a + b;
}
foo::foo()
{
printf("I am a base foo!\n");
result = -1;
}
int foo::operator()()
{
return result;
}
int main(void)
{
int ret1 = -12345;
int ret2 = -12345;
foo myfoo(3, 8);
foo otherfoo();
ret1 = myfoo();
ret2 = otherfoo(); //fails. Also, otherfoo()() fails.
printf("foo: %d otherfoo: %d\n", ret1, ret2);
return 0;
}
或'FOO otherfoo {};'在C++ 11 – Brian
謝謝@BrianBi。我已經添加了答案。 – NPE
NPE,該鏈接非常非常容易受到鏈接腐爛。關於[C++最令人頭疼的解析]已經有很多關於SO的很好的討論(http://stackoverflow.com/questions/16588750/cs-most-vexing-parse-again)。 –