c++ - 如何模板化变量名称,而不是类型?

标签 c++ templates

我的问题是关于如何模板化应该使用的类成员的名称

也许是一个简化的伪示例:

/** 
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/

相关文章:

c++ - 在 C++ 中确定给定 NxN 矩阵的所有方子矩阵

c++ - Eigen:是否记录了从数组类型获取标量类型?

c++ - 可以从模板类型中自动获取基类的类型吗?

c++ - cpp迭代器问题

C++ 模板特化改变了 constexpr 规则?

c++ - 将数组传递给 lambda 函数

c++ - 当我使用函数指针变量消失

c++ - 将 __declspec(selectany) 与静态数据一起使用是否对该数据的初始化顺序有任何影响?

c++ - 仅资源 DLL - 文件夹、路径

c++ - 没有比较的多集?