如何将模板类对象的引用放置在不同的(模板化的,但我不确定相关的)类中?引用模板类/对象的数据成员
目前,我有(简体):
template <typename T, size_t D>
class Field
{
public:
template <size_t meshDim>
Field(const Mesh<meshDim>& mesh, const std::string &fileName):
fileName_(fileName),
meshDim_(meshDim),
mesh_(mesh) // <- this also doesn't compile,
// although I think it would if I had a data member named
// mesh_ that compiled
{
for (unsigned int d=0; d<D; d++) {
field_[d].reserve(mesh.numCells());
}
}
private:
std::vector<T> field_[D];
std::string fileName_;
const size_t meshDim_;
template<size_t meshDim>
const Mesh<meshDim> &mesh_; // <- This doesn't compile
};
这击中编译时错误:data member 'mesh_' cannot be a member template
。这个关于variable templates的链接让我觉得我想要做什么(或者至少与我正在尝试做的事情类似)应该可以使用c++14
,但可能不会使用c++11
。
如果我的const Mesh<meshDim> &mesh_;
线之前删除template<size_t meshDim>
行(除去模板参数也,以避免发生不可预料meshDim
),然后有人告诉我,我正在做invalid use of template-name 'Mesh' without an argument list
,这是有道理的。
如果我离开<>
,但没有参数(不是我期望的这个工作,但尝试任何东西),我得到wrong number of template arguments (0, should be 1)
。
这可能吗?我是否需要制作一些/所有东西的一些/所有部分static
或者也许constexpr
?
原则上,应该只有一个Mesh
对象,我确定,试图使它成为一个constexpr
构造,因为它需要的参数可以#define
d。通过构建系统,如果需要的话。
感谢您为此 - 模拟'meshDim'参数上的'Field'类是我认为合适的解决方案,因为我也可以删除成员变量'meshDim_',它(已经)在某些地方明确使用。再多几个'template class Field <....>;'要写的声明... – chrisb2244