2008-09-28 101 views
3

我已經定義(部分)一個模板類爲函數指針模板類成員函數

template <class T> MyClass 
{ 
public: 
    void DoSomething(){} 
}; 

如果我想從另一個類調用DoSomething的,但能夠爲多個「T」型做到這一點在同一個地方,我堅持一個想法,因爲方法函數指針是唯一受限於類類型的。當然,每個MyClass都是不同的類型,所以我不能以「多態」的方式將函數指針存儲到MyClassDoSomething()中。

我的用例是我想在一個持有類中存儲一個向「DoSomething」的函數指針向量,這樣我就可以從一個地方向所有存儲的類發出調用。

有沒有人有任何建議?

回答

12

好吧,所以仿函數解決方案不能按需要工作。也許你應該讓你的模板類從一個共同的基礎「接口」類繼承。然後你使用這些矢量。

事情是這樣的:

class Base { 
public: 
    virtual ~Base(){} 
    virtual void DoSomething() = 0; 
} 

template <class T> class MyClass : public Base { 
public: 
    void DoSomething(){} 
}; 

std::vector<Base *> objects; 
objects.push_back(new MyClass<int>); 
objects.push_back(new MyClass<char>); 
0

你知道,這正是我需要做的。 Bizzarly早在我的用例中,我已經將它作爲一個有效的解決方案予以打折,因爲現在逃脫了我的原因。我認爲我在編譯時調度的同一個地方(即編譯時間和運行時間混亂的腦子裏)編譯了一些元編程的東西。

非常感謝您的支持!