【发布时间】:2012-11-15 19:40:57
【问题描述】:
我想其他一些人之前遇到过这个设计问题,所以我希望有人能给我一些建议:我有一个应该包含私有通用对象的类。据我所知,如果不将整个班级都作为模板,我就无法逃脱。美好的。但是现在,有没有办法在构造过程中从构造函数参数推断底层对象的类型,而无需显式指定它(我想在实例化Test 类时省略模板参数Derived):
#include <iostream>
template <typename T>
class Generic
{
};
class Derived : public Generic<int>
{
public:
Derived ();
int GetFoo ();
private:
int m_foo;
};
template <typename T>
class Test
{
public:
Test (T &underlying);
private:
T m_underlying;
};
Derived::Derived ()
{
this->m_foo = 666;
}
int Derived::GetFoo ()
{
return this->m_foo;
}
template<typename T>
Test<T>::Test (T &underlying) : m_underlying(underlying)
{
std::cout << this->m_underlying.GetFoo() << std::endl;
}
int main ()
{
Derived underlying;
Test<Derived> test(underlying);
return 0;
}
为了实现我的目标,我还应该了解其他任何设计策略吗?
【问题讨论】:
-
@KerrekSB 如果我能帮上忙,我现在宁愿不涉及 BOOST……我的意思是,我对 C++ 的要求太高了吗?
-
我不会争辩,但对 Boost 的 量的恐惧绝不是健康的。哈哈。 “任何”……明白了吗?
-
@KerrekSB 非常有趣,先生 :)
-
好吧,说真的,像
boost::any这样的类可以写成大约十行,所以关闭自己的想法确实对您不利。当然,您始终可以根据“如同 Boost”规则滚动您自己的代码,但在 Boost 中有一些有用的想法。
标签: c++ templates type-inference