考慮這個簡單而毫無意義的代碼。C++仿函數和函數模板
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
這是一個非常簡單的函數模板示例。但是,如果我想用超載的替換A::test
以使其成爲仿函數?
#include <iostream>
struct A {
template<int N>
void operator()() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a<1>(); // <-- error, how do I do this?
}
當然如果operator()
把它都依賴於模板參數,編譯器可能可能推斷出模板。但我無法弄清楚用無參數函子指定模板參數的正確語法。
有沒有適當的方法來做到這一點?
顯然,這種代碼會工作,因爲它繞過了仿函數語法:
a.operator()<1>();
但有點違背它是一個仿函數:-P的目的。
+1:在代碼混淆中使用的奇怪語法。應在http://thc.org/root/phun/unmaintain.html中提及:-) – 2012-09-14 22:12:15