gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:10:29 26 4
gpt4 key购买 nike

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com