比方說,我們有基類表是從模板C類可能繼承++專業對自己
template <typename T>
class Table
{
public:
Table();
virtual ~Table() = default;
private:
// get all column names as list
virtual std::list<std::string> getAllColumnsImpl();
};
,我想繼承TestTable的類和重寫方法getAllColumnsImpl從基類:
class TestTable :
public Table<TestTable>
{
public:
TestTable();
virtual ~TestTable() = default;
std::string Description;
int Count;
private:
// get all column names as list
std::list<std::string> getAllColumnsImpl() override;
};
一般情況下可以嗎?
比如我有這樣的鏈接錯誤:
error LNK2019: unresolved external symbol "public: __cdecl Table<class TestTable>::Table<class TestTable>(void)" ([email protected]@@@@[email protected]) referenced in function "public: __cdecl TestTable::TestTable(void)" ([email protected]@[email protected])
您不能覆蓋私有成員函數,它必須被「保護」。 –
@Someprogrammerdude - 同樣的錯誤... – Alexander
@Someprogrammerdude - Jason Lang給出的答案,這正是CRTP - 我的問題在這裏有答案https://stackoverflow.com/questions/4173254/what-is-the-curiously- recurring-template-pattern-crtp - 但我之前不知道CRPT - 因爲找不到有關信息 - 可能是我的問題可以幫助像我這樣的人... – Alexander