क्या struct
के अंदर "वर्तमान struct
का प्रकार" प्राप्त करना संभव है?संरचना/कक्षा के अंदर "वर्तमान प्रकार" के बारे में जानकारी कैसे प्राप्त करें?
struct foobar {
int x, y;
bool operator==(const THIS_TYPE& other) const /* What should I put here instead of THIS_TYPE? */
{
return x==other.x && y==other.y;
}
}
मैं इसे इस तरह से करने की कोशिश की: उदाहरण के लिए, मैं इस तरह कुछ करना चाहता हूँ
struct foobar {
int x, y;
template<typename T>
bool operator==(const T& t) const
{
decltype (*this)& other = t; /* We can use `this` here, so we can get "current type"*/
return x==other.x && y==other.y;
}
}
लेकिन यह बदसूरत लग रहा है, नवीनतम सी ++ स्टैंडर्ड, और MSVC connot के समर्थन की आवश्यकता है इसे संकलित करें (यह "एक आंतरिक त्रुटि" के साथ दुर्घटनाग्रस्त हो जाता है)।
वास्तव में, मैं सिर्फ कुछ पूर्वप्रक्रमक मैक्रो लिखना चाहते operator==
जैसे कार्यों को स्वत: जनरेट:
struct foobar {
int x, y;
GEN_COMPARE_FUNC(x, y);
}
struct some_info {
double len;
double age;
int rank;
GEN_COMPARE_FUNC(len, age, rank);
}
लेकिन मैं मैक्रो के अंदर "वर्तमान प्रकार" पता करने की जरूरत।
क्यों बस नहीं अपने मैक्रो GEN_COMPARE_FUNC (foobar, एक्स, वाई) के बजाय? 'Variadic Macros' के माध्यम से – Rollie
@ForEveR। यह जीसीसी और एमएसवीसी द्वारा समर्थित है, इसलिए यह मेरे लिए पर्याप्त है। – qehgt
एक टेम्पलेटेड 'बूल ऑपरेटर ==' का उपयोग करके, आप गलती से दो प्रकार की तुलना करना संभव बना सकते हैं जहां उनके लिए तुलनीय होने के लिए यह समझ में नहीं आता है। –