Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在函数返回时强制移出函数中的临时成员?_C++_C++17 - Fatal编程技术网

C++ 如何在函数返回时强制移出函数中的临时成员?

C++ 如何在函数返回时强制移出函数中的临时成员?,c++,c++17,C++,C++17,对于DiagnosticSQLResult的结果类型,我有一个holder类SqlContext,如下所示: template <typename T> struct DiagnosticSQLResult { bool success = true; string sqlError; T data; }; DiagnosticSQLResult<ComplexType> GetSomeValue(SqlDatabase db) { S

对于DiagnosticSQLResult的结果类型,我有一个holder类SqlContext,如下所示:

template <typename T>
struct DiagnosticSQLResult
{
    bool success = true;
    string sqlError;
    T data;
};


DiagnosticSQLResult<ComplexType> GetSomeValue(SqlDatabase db)
{
    SqlContext<ComplexType> ctx(db, "sql query here");
    ctx.ForEachInSelect([&](SqlQuery& q){
        // code initializing result variable here
    });
    return ctx.result;
}
模板
结构诊断QLresult
{
布尔成功=真;
字符串sqlError;
T数据;
};
DiagnosticSQLResult GetSomeValue(SqlDatabase db)
{
SqlContext-ctx(db,“这里的sql查询”);
ctx.ForEachInSelect([&](SqlQuery&q){
//在这里初始化结果变量的代码
});
返回ctx.result;
}

我想移出ctx.result变量,而不是在从函数返回时复制构造另一个实例。这有可能吗?据我所知,我不能直接调用std::move,因为它将是外部的一个悬空引用…

您返回的是一个值,而不是一个引用。只要移动一下就可以了。看看。这可能会有帮助。@john-不,不是。直接返回
ctx
将使其符合条件。但不是
ctx.result
@john-只是用来规范它们的引用-这是使用id表达式的要求。不包括成员访问权限。虽然我认为如果有人足够勇敢,他们可以编写一个提案,使其与成员访问一起工作。这是一个完全自定义编写的类。除了我的存储库,你在任何地方都找不到它。如果需要,我可以链接它,但我怀疑这里的ppl会找到代码子栏:)