我正在处理一些生成的具有破损多态性的类。对于每个生成的类T,都有一些T_type_info,T_writer,T_reader类,这些类仅在概念上与T有关。模板返回类型/演示为模板的功能
我想要做的是这样的:
template <class T> class Wrapper
{
public:
template <class W> W topic_cast(BrokenBaseClassWriter* p);
// other operations with the same problem ...
};
template <> class Wrapper<MyTopic>
{
public:
template <> MyTopicWriter* topic_cast(BrokenBaseClassWriter* p) { ... }
};
所以,我可以做这样的事情:
void Write(const Wrapper<T>& topic)
{
BrokenBaseClassWriter p = not_important;
topic.topic_cast(p)->do_stuff();
}
我的T类是从IDL生成是概念存在于应用程序空间。它们不是来自任何东西。在我上面的例子中,W并不是一个独立的参数,它是“不依赖于T的东西”。我试图在应用程序中保留T的所有知识,并在后端保留T'的所有知识(不知道T)。
然而,编译器说我的topic_cast函数不是模板函数 - 我想是因为模板出现在返回类型中,并且它不会与任何其他实例区分开来。我知道(模板只有返回类型不同)是不合法的。只有在我的情况下,它确实是独一无二的,因为W不是一个独立的参数。但与编译器争论很少有帮助。
我可以这样做,还是有另一种方法来做到这一点“铸造为模板类型的功能”?
这就是我正试图用我上面建造的方形轮到达。封装不再需要 - 类型映射是其最初的目的。谢谢 – swarfrat