【发布时间】:2013-07-19 00:16:20
【问题描述】:
我试着睡在上面,但还是迷路了。我什至不确定我应该使用什么搜索词。有人能指出我正确的方向吗?
我想要这样的东西:
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 库的情况下实现,即使我必须自己创建一个类似的方法/模板。
【问题讨论】:
-
@jogojapan 读取文件的 BOM,
Interim设置为适合读取该文件的类型,因此它可以是charunsigned short或unsigned long。输出类型将是用户需要的字符串处理类型,可能是char或wchar_t -
@Waldermort 你有没有想过在虚函数中使用多态性?通过创建 main_class 的新实例,为 main_class 和交换实现创建一个“接口”。
-
如果可能性的数量是有限的并且数量很小,您可以强制实例化所有案例,然后在运行时选择正确的案例。
-
@Lalaland 我仍然需要对所有排列进行硬编码,然后虚函数会导致性能损失。
-
更新帖子以反映这些细节。