template <class T>
class IValue {
public:
virtual I& get() const = 0;
};
template<typename T>
class Value : public IValue<T>
{
public:
Value() :m_value()
{}
virtual T& get() const override
{
return m_value;
}
virtual ~Value()
{}
private:
T m_value;
};
class A
{
public:
A() {}
};
int main()
{
Value<A> a1;
//a1.get();
}
但我得到的编译错误如下所述:
$ c++ -std=c++14 try52.cpp
try52.cpp:4:17: error: 'I' does not name a type
virtual I& get() const = 0;
^
try52.cpp: In instantiation of 'class Value<A>':
try52.cpp:32:10: required from here
try52.cpp:14:16: error: 'T& Value<T>::get() const [with T = A]' marked override, but does not override
virtual T& get() const override
^
try52.cpp: In instantiation of 'T& Value<T>::get() const [with T = A]':
try52.cpp:34:1: required from here
try52.cpp:16:16: error: invalid initialization of reference of type 'A&' from expression of type 'const A'
return m_value;
感谢您的评论我得到了这个工作,但它是一个正确的设计:
template <class T>
class IValue {
public:
virtual const T& get() const = 0;
};
template<typename T>
class Value : public IValue<T>
{
public:
Value() :m_value()
{}
virtual const T& get() const override
{
return m_value;
}
virtual ~Value()
{}
private:
T m_value;
};
class A
{
public:
A(){}
};
int main()
{
Value<A> a1;
a1.get();
}