我想使用本地類作爲函子,並使用g ++(3.4.6)獲取編譯器錯誤。作爲函數的C++本地類
將下面的類(Processor
)放在全局範圍內解決了錯誤,所以我猜錯誤是因爲函數局部結構/類。爲了代碼的清晰性和易用性,我希望在函數內部有類。想知道是否有一個解決方法來使下面的代碼工作。
TEST.CPP:24:錯誤:對呼叫\ u2018foreachArg沒有匹配的功能(INT &,炭 * &,processSubs(INT,字符* )::處理器&)\ u2019
template <class Functor>
void foreachArg(int n, char *args[], Functor& f)
{
for(int i=0; i<n; ++i)
f(args[i]);
}
int processSubs(int argc, char *args[])
{
class Processor
{
public:
void operator()(const char *arg)
{
}
};
Processor p;
foreachArg(argc, args, p);
}
int main(int argc, char *argv[])
{
processSubs(argc, argv);
}
不,這兩個選項都使用C++ 11兼容的編譯器,或將該類移到該函數之外。 – 2012-03-19 15:10:38
請參閱:http://stackoverflow.com/a/2598272/294864以獲取有關匿名結構作爲模板參數的C++ 11規範之前的參考。 – Akanksh 2012-03-19 15:51:27
還有第三種選擇 - 使用「本地」仿函數成語。例如,Boost正在增加一個。 – 2012-08-09 16:32:25