C++ 工厂函数返回常数

C++ 工厂函数返回常数,c++,C++,我有一个基于丑陋容器创建容器的工厂 template<class T> std::vector<T> containerFactory(const UglyContainer* uglyContainer) { std::vector<T> container(uglyContainer->count); Getter getter; for(unsigned int i=0;i<uglyContainer->coun

我有一个基于丑陋容器创建容器的工厂

template<class T>
std::vector<T> containerFactory(const UglyContainer* uglyContainer)
{
    std::vector<T> container(uglyContainer->count);
    Getter getter;
    for(unsigned int i=0;i<uglyContainer->count;++i)
    {
        getter(container[i], uglyContainer->values[i]);
    }
    return container;
}
模板
标准::向量容器工厂(const-UglyContainer*UglyContainer)
{
std::载体容器(uglyContainer->count);
吸气剂;
for(无符号整数i=0;i计数;++i)
{
getter(container[i],uglyContainer->values[i]);
}
返回容器;
}

如何使用返回const std::vector的工厂函数来补充containerFactory

返回向量上的常量不相关。由于它是通过值返回的,因此将复制它,并且const将应用于副本的使用

由于在factory方法中在堆栈上创建向量,因此无法通过引用返回向量


作为容器工厂的健壮性,您可以考虑将向量作为工厂方法的一个参数,并附加到它以避免向量的拷贝。

UHM,您的意思是他不能通过引用返回向量,而不是按值返回……它会更可靠地返回值:当通过向量填充时,如果它不是空的,可能会出现混乱。任何像样的编译器都应该删去副本;在C++11中,即使省略失败,返回值也将被移动而不是复制。@PiotrKalinowski更正。谢谢。@MikeSeymour创建一个创建向量并返回它(按值)的版本是对通过引用获取向量的版本的一个微不足道的补充。创建一个从创建的版本附加的版本更加困难,效率也要低得多。