gpt4 book ai didi

c++ - 存储指向具有模板函数的基础对象的指针

转载 作者:行者123 更新时间:2023-11-28 07:46:14 25 4
gpt4 key购买 nike

根据以下代码,我如何在“Controller”类中存储指向 Base 的指针?

template< class Derived >
class Base
{
public:
template < typename T >
void Serialise( T* t )
{
Derived* d = static_cast< Derived* >( this );
d->Serialise( t );
}
};

class Derived : public Base< Derived >
{
public:
template < typename T >
void Serialise( T* t )
{
printf( "serialising to object T\n" );
}
};

因此,如果我有一个 Controller 类,它将调用 Serialise 函数并传入要序列化的对象,我最终不得不存储指针及其派生类型,因为它是对象类型的一部分,而我需要的是能够在不知道实际类型是什么的情况下使用 Base 类型:

class Controller
{
public:
void DoSerialise();

private:
Base< Derived >* m_myObject; // I want this to just be Base* m_myObject but cant due to template!
};

最佳答案

简答 - 你不能。

假设模板参数不影响 Base 的接口(interface)(即:Derived 没有出现在任何函数签名中),您可以有一个非模板 Base 类,而派生类可以是模板。然而,这根本不符合您当前的模式。

在你的情况下,如果模板参数确实影响了接口(interface)(我强烈怀疑它在这种情况下确实如此),那么 Controller 需要了解 Derived 以便使用 Base,那么在哪里为了声明 Base,还知道 Derived 的危害。

评论后编辑:您确定希望任何派生类都能够序列化为任何 类型吗?为什么不具有从 Serialiser 基类派生的类的层次结构,然后 Serialise() 可以接受对类型 Serialiser 的引用并丢失模板参数。

关于c++ - 存储指向具有模板函数的基础对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832793/

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