是否可以编写一个方法,该方法可以根据传递给此方法的bool参数将引用或复制(getMember(bool getCopy))返回给类成员?
class Class
{
const std::vector<int>& getMember() { return _member; }
const std::vector<int> getCopyOfMember() { return _member; }
??? getMember(bool getCopy) { ??? }
std::vector<int> _member;
}
我可以使用:
Class cl;
const std::vector<int>& myVector = isCopyNeeded ?
cl.getCopyMember() :
cl.getMember();
for (auto elem : myVector)
...
霍维尔 我想要这样的东西:
for (auto elem : cl.getMember(isCopyNeeded))
...
一个函数只能有一个返回类型,所以不,它不能完成。
目前还不清楚它可能服务于什么目的。
通常,您将提供返回 const 引用的函数:
const std::vector<int>& getMember() const { return _member; }
然后,您的用户可以选择是否需要引用:
const std::vector<int>& aReference = anObject.getMember();
或副本:
std::vector<int> aCopy = anObject.getMember();
不能根据参数的值更改返回类型。一种选择是使用两个重载函数使用标记类型来区分它们。
const std::vector<int>& getMember(std::true_type tag) { return _member; }
std::vector<int> getMember(std::false_type tag) { return _member; }
您需要添加
#include <type_traits>
使用std::true_type
和std::false_type
。
当然,您必须使用std::true_type
或std::false_type
作为参数来调用它们。
Class c;
auto ret1 = c.getNumber(std:::true_type{});
auto ret2 = c.getNumber(std:::false_type{});