У меня есть вопрос о явных и шаблонах:используя явный с шаблонами C++
template<class T>
class A {
class A_Impl {
T var;
public:
explicit A_Impl(T var1) : var(var1), version(1)
{
}
A_Impl(const A_Impl& a) : var(a.var), version(1)
{
}
const A_Impl& operator=(const A_Impl& a)
{
var=a.var;++version;return *this;
}
operator T() const { return var; }
friend class A<T>;
};
A_Impl a;
public:
A(T var): a(var)
{
}
A_Impl& get() { return a; }
};
void main() {
A<int> a1(5);
cout<<"a1 = "<<a1.get()<<endl;
a1.get()=7;
cout<<"a1 = "<<a1.get()<<endl;
a1=13;
cout<<"a1 = "<<a1.get()<<endl;
}
я получаю ан ошибки в a1.get()=7;
который говорит ни один оператор «=» не соответствует этим операндам
Кроме того, если я беру явное слово, оно будет скомпилировано, но я не понимаю разницу между функцией a1.get()
и a1=13;
, которая отлично работает даже с явным.
http://stackoverflow.com/questions/121162/what-does -The-явно-ключевое слово-в-с-средних – Gasim