c++ - 处理运行时类型未知的模板

标签 c++ templates

我试着睡在这个上面,但还是迷路了。我什至不确定我应该使用什么搜索词。有人能指出我正确的方向吗。

我想要这样的东西:

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::codecvtphase_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/

相关文章:

c++ - 静态 vector 的大小

templates - Prawn 重复模板用不同的内容填充它

c++ - 是否可以根据初始化是否为 constexpr 自动定义变量静态或非静态?

c++ - 为什么真陈述是假的?

c++ - 奇怪的模板行为

c++ - 使用可变参数模板的递归继承

c++ - 将模板化类型与 C++ 中的特定类/类型进行比较

python - 将C++中的数据映射到内存并以Python读取数据

c++ - 以下场景如何进行类型转换?

c++ - 将数值绑定(bind)到准备好的 SQL 的正确方法