将模板类实例类型别名传递给非成员模板函数

时间:2017-12-13 23:20:33

标签: c++ templates

是否有办法使用ClassTmplt/DerivedFloat::InternalType类对象指针将模板类实例类型别名(DoSomething)传递给外部非成员模板函数(Base)(如最后两个{ {1}}函数注释行?)

test()

1 个答案:

答案 0 :(得分:2)

没有。考虑:

void f(Base* ptr) {
    // What type does ptr point to?
    // The runtime derived type might not exist when this function compiles
}

由于指针的动态类型仅在运行时知道,因此编译器在编译函数时无法访问它。

如果定义可用,可能会有更多选项,但所有这些选项都要求您事先知道要支持的整个类型集,并且可能需要向下转发。 (如果你走这条路线,那么“id”类型可能会有所帮助。)

您可以使用访客模式构建一些有限的工作设计。