如何將模板類對象的引用放置在不同的(模板化的,但我不確定相關的)類中?引用模板類/對象的數據成員
目前,我有(簡體):
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