gpt4 book ai didi

c++ - 将未知类型的模板化类传递给非模板化类构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:42:24 25 4
gpt4 key购买 nike

我有两个类,我们称它们为 SomeClass 和 OtherClass。

SomeClass 是模板化的:

template <typename T> class SomeClass
{
public:
SomeClass (const T& value);
};

OtherClass 不是模板化的,而是使用 SomeClass。

class OtherClass
{
public:
OtherClass (const SomeClass& c, const std::string s);
};

它们应该这样称呼:

SomeClass<int> some(5);
OtherClass other(some, "hello, world!");

other.doSomethingWithSome();

...显然,这将无法编译,因为编译器需要知道 SomeClass 的类型...

对我来说不幸的是,SomeClass 的类型几乎可以是任何类型(尽管实际使用的类型数量有限,只是不相关),并且在开发过程中可能会经常更改。 (我知道,我知道,我想我真的可以使用 SomeClass 的类型并将其传递给模板化的 OtherClass,但这是一项相当乏味的工作,因为有很多实例;而且,我不想假装这两个类知道对方的工作。:) )

问题很简单:如何使用这种语法? (无需模板化 OtherClass。)

最佳答案

一个明显的答案是你可以制作SomeClass从非模板抽象类继承:

template <typename T>
class SomeClass : public SomeAbstractBase
{
/* ... */
};

反过来,OtherClass将在 SomeAbstractBase 上工作:

class OtherClass
{
public:
OtherClass (const SomeAbstractBase& c, const std::string s);
};

你并没有真正给出足够的证据来确定这是一个合适的解决方案,但它可能是。最后如果没问题写SomeAbstractBase (即:您可以轻松地确定所有 SomeClass<T> 的共同点),这可能是可行的方法。

关于c++ - 将未知类型的模板化类传递给非模板化类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502853/

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