小编Ale*_*eus的帖子

在 C++ 中从返回值创建元组时避免额外的复制

我正在尝试创建一个对象,该对象存储从函数创建的对象元组,static但是当tuple创建时,对象被复制到tuple而不是直接放入其中,调用两次中每个对象的析构函数tuple,这是一种行为我想避免。有没有办法解决这个问题,而不必为每个插件类创建自定义移动/复制构造函数?

代码如下:

#include <tuple>
#include <iostream>

namespace details
{
    template<typename PluginT, typename ContainerT, typename TupleT, size_t... Is>
    static PluginT construct_plugin(ContainerT& container, TupleT&& tuple, std::index_sequence<Is...>) 
    {
        return PluginT(container, std::get<Is>(std::forward<TupleT>(tuple))...);
    }

    template<typename PluginT, typename ContainerT, typename TupleT>
    static PluginT construct_plugin(ContainerT& container, TupleT&& tuple) 
    {
        return construct_plugin<PluginT>(container, std::forward<TupleT>(tuple), std::make_index_sequence<std::tuple_size<std::decay_t<TupleT>>::value>{});
    }
}

struct simple_plugin
{
    template<typename ContainerT>
    simple_plugin(ContainerT& container) {}

    ~simple_plugin()
    {
        std::cout << "simple_plugin destructor" << std::endl;
    }
};

struct plugin_with_params
{
    template<typename ContainerT>
    plugin_with_params(ContainerT& …
Run Code Online (Sandbox Code Playgroud)

c++ constructor tuples copy move

4
推荐指数
1
解决办法
313
查看次数

标签 统计

c++ ×1

constructor ×1

copy ×1

move ×1

tuples ×1