将模板化类存储在持久性内存中?

时间:2017-11-12 02:21:01

标签: c++ templates eigen

我想将模板类中的信息写入文件,然后能够从文件中读取以创建该模板类的实例。我知道如何编写它(使用std::ofstream,编写其模板参数和相关信息),但我在读它时有点丢失。我可以从文件中读取模板参数,但它不能在运行时编译模板类的实例,因此它会失败(或者根本不会编译)。我想这样做的原因是我可以在持久性内存中存储一​​些东西。我试图这样做的类是Eigen的Tensor类,如果这有帮助的话(给出的例子更通用,并且它的解决方案仍然有效)。关于如何实现这一目标的任何想法?

一个例子:

template<int example> class A{
    //omitted constructors and everything else
    void write(std::ofstream& out){ //writes relevant information of class to a file
        out<<example;
    }
};

至于阅读文件:

void read(std::ifstream& in){
    int example;
    in>>example;
    A<example> a; //doesn't work because A<example> can't be compiled at runtime
}

修改 我理解模板类是如何工作的,并且只有在使用它们时它们才会被编译。我也明白为什么我的例子不起作用。我的问题是我是否可以在运行时编译新实例。我知道可以用.cpp文件做到这一点(不知道如何,我只知道它是可能的)。但是,我不知道模板类是否可行。我目前的解决方案可能是让我的程序创建新的可执行文件并运行它们,因此它们将已经编译了必要的东西,但这是缓慢且不令人满意的,所以我将这个问题留下来希望获得更好的溶液

2 个答案:

答案 0 :(得分:-1)

无论如何,必须在编译时知道模板参数。所以你可能不会将一些变量值作为模板参数传递。

答案 1 :(得分:-1)

模板类就是名字所说的 - templates ,用于在给出参数后构建真实的东西。没有模板类的对象,显然你不能在文件中写一个不存在的东西或者读它 如果没有使用参数实例化模板,则不会编译任何内容 - 模板类只是编译器如何构建它的指令如果需要