将未知类型的模板化类传递给untemplated类构造函数

Dea*_*eol 2 c++ templates

我有两个类,我们称之为SomeClass和OtherClass.

SomeClass是模板化的:

template <typename T> class SomeClass
{
public:
    SomeClass (const T& value);
};
Run Code Online (Sandbox Code Playgroud)

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

class OtherClass
{
public:
    OtherClass (const SomeClass& c, const std::string s);
};
Run Code Online (Sandbox Code Playgroud)

应该以这种方式调用它们:

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

other.doSomethingWithSome();
Run Code Online (Sandbox Code Playgroud)

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

对我来说不幸的是,SomeClass的类型几乎可以是任何东西(尽管使用的实际类型的数量是有限的,只是无关的),并且在开发过程中可能经常发生变化.(我知道,我知道,我想我真的可以使用SomeClass'类型并将其传递给模板化的OtherClass,但由于存在许多实例,因此它非常繁琐;而且,我想假装两个班都不知道其他人的工作.:))

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

ice*_*ime 6

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

template <typename T>
class SomeClass : public SomeAbstractBase
{
    /* ... */
};
Run Code Online (Sandbox Code Playgroud)

反过来,OtherClass将继续努力SomeAbstractBase:

class OtherClass
{
public:
    OtherClass (const SomeAbstractBase& c, const std::string s);
};
Run Code Online (Sandbox Code Playgroud)

你并没有真正给予足够的肯定,在适当的解决方案中,但它可能是.最后,如果你没有写任何问题SomeAbstractBase(即:你很容易设法确定所有人的共同点SomeClass<T>),那么可能就是这样.