我试着睡在这个上面,但还是迷路了。我什至不确定我应该使用什么搜索词。有人能指出我正确的方向吗。
我想要这样的东西:
template < typename Interim >
class phase_one
{
Interim do_something () ;
}
template < typename Output, typename Interim >
class phase_two
{
Output do_something_more ( Interim ) ;
}
template < Output >
class main_class
{
phase_one m_first;
phase_two m_second;
Output do_main ( )
{
return m_second.dosomething_more( m_first.do_something() );
}
}
希望您能从伪代码中看出我需要存储和调用两个模板类。但是 Interim
类型直到运行时才为人所知。我事先知道的唯一事情是 Output
类型以及两个阶段具有共同类型的事实。
如何存储这些对象以及如何使它们协同工作? 这是需要类型删除的实例吗?
编辑:
phase_one
将是一个 std::codecvt
而 phase_two
将是我创建的另一个 codecvt
。我需要根据 phase_one
选择 phase_two
。所有这些都是在运行时读取文件的 BOM 后完成的。
我更愿意在没有 boost 或 c++11 的情况下执行此操作。 如果有这样做的 boost 方法,我很想看看它,但它必须在没有 boost 库的情况下实现,即使我必须自己创建一个类似的方法/模板也是如此。
最佳答案
我修改了你的 main_class 模板。基本上让它知道 Interim
类型
template < typename Interim >
class phase_one
{
Interim do_something () ;
}
template < typename Output, typename Interim >
class phase_two
{
Output do_something_more ( Interim ) ;
}
template < typename Output, typename Interim >
class main_class
{
phase_one<Interim> m_first;
phase_two<Output, Interim> m_second;
Output do_main ( )
{
return m_second.dosomething_more( m_first.do_something() );
}
}
你像这样实例化 main_class
int main () {
if (some condition) {
main_class<char, unsigned long> m;
m.do_main();
} else {
main_class<char, unsigned short> m;
m.do_main();
}
}
这对你有用吗?
关于c++ - 处理运行时类型未知的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713260/