我想避免有兩個參數。因此,我們有:C++ :: Template函數 - 從object.function獲取對象的地址
class A;
void A::boo();
我希望把這個代碼:
template <class C>
void foo(C &c, void (C::*func)())
{
(c.*func)();
}
A a;
foo(a, &a.boo);
要這樣:
template <class C, C &c> // Something similar
void foo(void (C::*func)())
{
(c.*func)();
}
A a;
foo(&a.boo); // Since I'm using the reference of the object instance
我相信我的理解是,在C++模板是簡單的字符串替換,但我觀察它們的實現稍微先進和靈活。我也相信我掌握了階級及其成員職能的概念;函數的內存中有一個地址,類實例就像函數的參數,以訪問該類實例的內存成員。
所以,讓這一切成爲現實,是否有辦法做我想做的事情?
編輯:
我不好,錯過了&跡象。更正:& a.boo
C++模板無處不接近簡單的字符串替換。在你的例子中'foo'應該從哪裏得到'c'?你期望通過它作爲模板參數嗎? – TartanLlama
而'foo(a,a.boo)'不應該編譯。你是不是指'foo(a,&A :: boo)'? – TartanLlama
C++有時很麻煩:你總是需要對象和成員函數指針! –