我不知道应该如何进行模板专业化。这一次,不幸的是,谷歌和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类型。 –