इस सरल और व्यर्थ कोड पर विचार करें।सी ++ मज़ेदार और फ़ंक्शन टेम्पलेट
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
यह एक समारोह टेम्पलेट की एक बहुत ही सरल उदाहरण है। क्या होगा यदि मैं इसे A::test
को एक अधिभारित operator()
के साथ एक मज़ेदार बनाने के लिए प्रतिस्थापित करना चाहता था?
#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()
मानकों जो टेम्पलेट पर निर्भर करते थे ले लिया है, संकलक संभवतः टेम्पलेट अनुमान कर सकते हैं। लेकिन मैं पैरामीटर रहित फिक्स्चर के साथ टेम्पलेट पैरामीटर निर्दिष्ट करने के लिए उचित वाक्यविन्यास नहीं समझ सकता।
क्या ऐसा करने का कोई उचित तरीका है?
जाहिर है, इस कोड को काम के बाद से यह functor वाक्य रचना नजरअंदाज होगा:
a.operator()<1>();
लेकिन यह है कि जैसे कि इस एक functor :-P होने का उद्देश्य धरा।
a.operator()<1>();
वाक्य रचना:
+1: कोड-obfuscation में उपयोग करने के लिए अजीब वाक्यविन्यास कुछ माना है। Http://thc.org/root/phun/unmaintain.html :-) में उल्लेख किया जाना चाहिए –