在C++中,純虛擬類通常用於運行時多態性。您可以使用CRTP和將接口作爲參數的函數嗎?
所以,你必須:
class IInterfaceA
{
virtual void DoFoo() = 0;
};
和派生類,如:
class CFancyObject : public IInterfaceA
{
...
然後可以在函數中使用,如:
void Foo(IInterfaceA &interface);
但這運行情況,並如果對象在編譯時已知,我們可以使用CRTP做得更好:
template<class T> class IInterfaceA
{
public:
void DoFoo()
{
static_cast<T*>(this)->CallDerivedFunction();
}
}
class CFancyObject : public IInterfaceA<CFancyObject>
{
...
}
在使用IInterface作爲參數的函數中,是否可以使用基於CRTP的派生類?
void Foo(IInterfaceA<?> &interface);
難道你不能只有一個非模板化的基礎接口,模板化接口從中繼承嗎? – Nick 2012-02-16 17:03:01
@Nick:但它必須調用派生類的成員函數,它必須在編譯時計算。我不太清楚如何在代碼中描述。 – Coder 2012-02-16 17:05:35