C++ C++;-在模板中定义复制构造函数

C++ C++;-在模板中定义复制构造函数,c++,templates,C++,Templates,我是模板编码的初学者,在模板中定义构造函数时遇到困难,我只是在寻找关于这个问题的答案,但找不到相关的问题 基本上,类/structxpair类似于pair,它有first和second template <typename First, typename Second> struct xpair { First first{}; Second second{}; xpair(){} xpair (const First& first, const S

我是模板编码的初学者,在模板中定义构造函数时遇到困难,我只是在寻找关于这个问题的答案,但找不到相关的问题

基本上,类/struct
xpair
类似于
pair
,它有
first
second

template <typename First, typename Second>
struct xpair {
   First first{};
   Second second{};

   xpair(){}
   xpair (const First& first, const Second& second):
              first(first), second(second) {}

   xpair& operator() (const First& first_, const Second& second_) {
      return new xpair (first_, second_);
   }

   xpair& operator= (const xpair& that) {
      return new xpair (that.first, that.second);
   }
};

返回新对(const_cast(that.first)、const_cast(that.second));

但它不起作用。哪里出了问题?

放下
新的
。这不是Java

<> > C++ > <代码> < < /> >是动态分配(对指针进行评估)的关键字,而不是使用。 在返回对局部变量的引用时,还必须重新考虑引用返回语义。这是一个悬而未决的参考

事实上,你的语义学在我看来很奇怪。例如,为什么
operator=
不实际修改分配给的对象?您应该从
将该
分配给
*此
的成员,然后返回对
*此
的引用(或者至少返回
无效

我不知道你的
操作符()
应该做什么-那应该是一个构造函数吗?嗯,不,你已经有一个了…:(


我强烈建议大家看看一些操作符重载的例子,以便更好地了解C++的结构和约束,以及我们的习惯用法和首选语义。

删除
新的
。这不是Java

<> > C++ > <代码> < < /> >是动态分配(对指针进行评估)的关键字,而不是使用。 在返回对局部变量的引用时,您还必须重新考虑引用返回语义。这会导致引用悬空

事实上,你的语义在我看来很奇怪。例如,为什么
操作符=
实际上没有修改分配给它的对象?你应该从
将该
分配给
*此
的成员,然后返回对
*此
的引用(或者至少返回
无效

我不知道你的
操作符()
应该做什么-那应该是一个构造函数吗?嗯,不,你已经有一个了…:(

我强烈建议看一些操作符重载的例子,以便更好地了解C++的结构和约束,以及我们的习惯用法和首选语义

xpair<string, string> a, b;
a = b;
non-const lvalue reference to type
'xpair<std::__1::basic_string<char>, std::__1::basic_string<char> >'
cannot bind to a temporary of type 'xpair<std::__1::basic_string<char>,
std::__1::basic_string<char> > *'
return new xpair (that.first, that.second);
return new pair (const_cast<First&>(that.first), const_cast<First&>(that.second));