我的問題是關於如何template'ize應使用類成員的名。如何模板化變量NAMES,而不是類型?
也許簡化&僞例如:
/**
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);
}
應該如何模板定義的樣子,我可以開關, MyClass的成員變量(aaa,bbb或ccc)在do中被訪問/修改什麼(。)?
在我的現實世界任務的所有部件相同類型的,如上面。
謝謝, Tebas
感謝。 通過值調用'all'是爲了簡化問題...但通過成員指針模板所請求的引用進行調用?或者我也可以使用副本? – Tebas 2010-10-15 13:23:47
@Tebas:你可以使用副本,但這意味着'doSomething'的效果在函數外部是不可見的。使用引用調用來確保結果在調用者的向量中可見。 – 2010-10-15 13:45:23
@Tebas:不,它沒有任何區別。無論哪種情況,所有[i]都將是類型MyClass的左值表達式。 – sellibitze 2010-10-15 13:45:26