c ++ typename of member variable
سؤال
هل من الممكن الحصول على اسم typename لمتغير عضو؟ علي سبيل المثال:
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
شكرًا
المحلول
ليس في C ++ 03. C ++ 0x يقدم decltype
:
typedef decltype(C::value) type;
بعض المترجمين لديهم ملف typeof
التمديد ، على الرغم من:
typedef typeof(C::value) type; // gcc
إذا كنت بخير مع Boost ، فلديهم ملف مكتبة لذلك:
typedef BOOST_TYPEOF(C::value) type;
نصائح أخرى
فقط إذا كنت بخير مع معالجة النوع في وظيفة
struct C { int value ; };
template<typename T, typename C>
void process(T C::*) {
/* T is int */
}
int main() {
process(&C::value);
}
لن يعمل مع أعضاء البيانات المرجعية. سيسمح C ++ 0x decltype(C::value)
للقيام بذلك بسهولة أكبر. ليس ذلك فحسب ، بل يسمح decltype(C::value + 5)
وأي أشياء تعبير خيالية أخرى داخل decltype
. GCC4.5 يدعمها بالفعل.
قد لا يكون بالضبط ما تبحث عنه ، ولكن من المحتمل أن يكون حلًا أفضل على المدى الطويل:
struct C {
typedef int type;
type value;
};
// now we can access the type of C::value as C::type
typedef C::type type;
هذا ليس بالضبط ما تريده ، لكنه يسمح لنا بإخفاء نوع التنفيذ من C::value
حتى نتمكن من تغييره لاحقًا ، وهو ما أظن أنك بعده.
يعتمد ذلك على ما عليك فعله به ولكنك ستفعل شيئًا مثل:
#include <iostream>
using namespace std;
struct C
{
typedef int VType;
VType value;
};
int main()
{
C::VType a = 3;
cout << a << endl;
}
لا تنتمي إلى StackOverflow