gpt4 book ai didi

c++ - 用友元类重载构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:09:18 26 4
gpt4 key购买 nike

我有一个类使用静态列表(示例中的 firstFriend)或动态列表(示例中的 secondFriend)进行初始化。我不想为示例编写列表功能,因为它不重要。关键问题是 firstFriend 和 secondFriend 是 friend 。 “目标”类的构造函数代码是相同的:如果我重载构造函数,我将复制完全相同的代码。我无法对构造函数进行模板化,因为它不起作用。

这是示例(注意:firstFriend 和 secondFriend 可能看起来相同,但在实际代码中它们并不相同,这只是一个大大简化的模型,它们的属性和功能之间的差异不会对“目标”类构造函数,因为公共(public)接口(interface)的部分从两个完全相同的类中使用):

template <class T>
class firstFriend
{
public:
firstFriend() {};

firstFriend(const T& t) {};

private:
T tAttribute;
};


template <class T>
class secondFriend
{
public:

secondFriend() {};

secondFriend(T t) : tAttribute(t) {};

friend class firstFriend<T>;

private:

T tAttribute;
};

class target
{
public:
target(const firstFriend<int>&)
{
// Some nice initialization of the TargetData.
}
target(const secondFriend<int>&)
{
// Exactly the same initialization as above.
// To the single character.
};
private:
firstFriend<int> TargetData;
};

问题:如何在不编写(复制/粘贴)相同代码两次的情况下重载构造函数?我试过对构造函数进行模板化,但没有用。隐式 Actor 可能?什么是最有效的方式(firstFriend 和 secondFriend 是巨大的数据列表)。提前致谢!

最佳答案

如果两个构造函数具有完全相同的代码,那么您可以将构造函数模板编写为:

template<class FriendType >
target(const FriendType &)
{
// Some nice initialization of the TargetData.
}

如果有一点不同,但大部分代码是相同的,那么你可以写一个init模板函数,并从两个构造函数中调用它:

  target(const firstFriend<int>& arg) 
{
init(arg);
//other code
}
target(const secondFriend<int>& arg)
{
init(arg);
//other code
}
private:
template<class FriendType >
void init(const FriendType &)
{
//common code
}

关于c++ - 用友元类重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com