可以根据传递给此方法的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)
...
Hovewer我想要这样的事情:
for (auto elem : cl.getMember(isCopyNeeded))
...
答案 0 :(得分:9)
一个函数只能有一个返回类型,所以不能,它不能完成 目前还不清楚它可能起什么作用。
通常,您将提供返回const引用的函数:
const std::vector<int>& getMember() const { return _member; }
然后您的用户可以选择是否需要参考:
const std::vector<int>& aReference = anObject.getMember();
或副本:
std::vector<int> aCopy = anObject.getMember();
答案 1 :(得分:3)
您无法根据参数的值更改返回类型。一种选择是使用两个重载函数,使用标记类型来区分它们。
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{});