我不知道應該如何進行模板專業化。這一次,不幸的是,谷歌和SO不能幫助我。在派生的模板類中專門設置一個基類的方法
對於基類:
class base
{
public:
virtual ~base() = 0;
virtual int getInt() { throw std::invalid_argument(std::string(typeid(*this).name()) + " can't return int"); }
};
base::~base() {}
和派生類:
template<class T>
class derived : public base
{
public:
derived() {}
derived(T value) { mValue = value; }
private:
T mValue;
};
此代碼:
void proof(base* arg)
{
try
{
std::cout << arg->getInt();
}
catch (std::exception& e)
{
std::cout << e.what();
}
std::cout << "\n\n";
}
int main()
{
base* a = new derived<int>(23);
base* b = new derived<std::string>("abc");
proof(a);
proof(b);
delete a;
delete b;
return 0;
}
輸出,如果是不是已經明顯:
class derived<int> can't return int
class derived<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > can't return int
我應該如何進行派生的專門化,所以getInt()會返回mValue?例如:
template<>
int derived<int>::getInt() { return mValue; }
這是行不通的。我想調用arg-> getInt()和我調用arg-> getInt()時拋出的基類中的異常,我希望pe輸出爲23。 你能給我一個示例代碼嗎?謝謝。
即默認構造函數看起來像一個可怕的想法!這是什麼意思*? –
我想封裝一些數據類型,所以我可以製作多種數據類型的矢量。注意:int只是一個例子,我確實有另外一些類不包含primite類型。 –