我希望标题有意义。我可能缺少正确表达它的词汇。
嗯,举个例子可能会更清楚。
我的问题是:在以下某些情况下(写在注释中),动态向下转换在运行时返回 0。我想知道这是否是正确的行为(使用 C++11),以及为什么,以及我能做些什么来使其工作。显然,Templated 和 A::A_templated 被视为不同的类,尽管通过使用别名“using”定义为相同的类。对于简单的 typedef 别名,不会出现问题。
template <class T>
class Templated {};
class A {
public :
typedef int A_Type;
template <class T>
using A_Templated = Templated<T>;
};
class Test_base {
public :
Test_base() {}
virtual void foo()=0;
};
template <class T>
class Test_Type : public Test_base {
public :
Test_Type() {}
void foo() {}
};
template < template <class T> class TT >
class Test_Templated : public Test_base {
public :
Test_Templated() {}
void foo() …Run Code Online (Sandbox Code Playgroud)