C++ 如何在函数返回时强制移出函数中的临时成员?
对于DiagnosticSQLResult的结果类型,我有一个holder类SqlContext,如下所示: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
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会找到代码子栏:)