我的问题是关于如何模板化应该使用的类成员的名称。
也许是一个简化的伪示例:
/**
Does something with a specified member of every element in a List.
*/
template<membername MEMBER> // <-- How to define such thing?
void doSomething(std::vector<MyClass> all){
for( i=0; i < all.size(); i++)
all[i].MEMBER++; // e.g.; use all[i].MEMBER in same way
}
和
class MyClass{
public:
int aaa, bbb, ccc;
}
和应用程序:
main(){
vector<MyClass> all = ....
// applicate doSomething() to all aaa's
doSomething<aaa>(all); // or:
doSomething<MyClass::aaa>(all); // or:
doSomething<?????>(all);
}
模板定义应该如何,我可以在 doSomething(.) 中切换 MyClass 的哪个成员变量(aaa、bbb 或 ccc)被访问/修改?
在我的现实世界任务中,所有 MEMBER 的类型都与上述相同。
谢谢, 特巴斯
最佳答案
模板参数仅限于类型、整数常量、指向具有外部链接的函数或对象的指针/引用和成员指针——但没有标识符。
但是你可以使用成员指针作为模板参数:
template<int MyClass::* MemPtr>
void doSomething(std::vector<MyClass> & all) {
for( i=0; i < all.size(); i++)
(all[i].*MemPtr)++;
}
:
doSomething<&MyClass::aaa>(all);
请注意,我将 doSomething 函数更改为获取引用,而不是按值接受 vector 。
关于c++ - 如何模板化变量名称,而不是类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3942426/