gpt4 book ai didi

c++ - 如何在不使用 C++0x auto 的情况下实现这种类型特定的对象生成器

转载 作者:行者123 更新时间:2023-11-28 01:07:00 25 4
gpt4 key购买 nike

我有一个模板化函数,其中模板化参数是一个仿函数。我想生成一些特定于特定质量函数的内部变量,以供从此仿函数调用的其他模板函数使用。所以我尝试了 auto 关键字,它似乎有效

template<typename QF>
float find_optimal_partition_louvain_with_gain(QF quality_function) {
auto internal_variables = gen(quality_function);
float result = do_some_work(internal_variables);
...
return result;
}

struct internals_for_linearised_functor {
double x;
};

internals_for_linearised_functor gen(mynamespace::linearised_function &f) {
linearised_internals internals;
internals.x = 5;
return internals;
}

使用 auto 这似乎编译得很好,这很令人高兴。我想尽量保持在当前标准内,以使我的代码更具可移植性。有没有一种方法可以使用当前标准来处理,或者这是 BOOST_AUTO 能够处理的事情?我试图实现的一般功能是根据模板化参数的类型生成一个对象,而不实际将新对象的类型传递给函数(即推断它)

谢谢

最佳答案

这应该开箱即用:

template<typename QF>
float find_optimal_partition_louvain_with_gain(QF quality_function) {
return do_some_work(gen(quality_function));
}

如果您需要 internal_variables 比一次调用更长的时间,您可以使用另一个小函数来推断类型:

template<typename QF, typename T>
float find_optimal_partition_louvain_with_gain_detail(QF quality_function, T internal) {
float result = do_some_work(internal);
/* use internal and quality_function again here!.*/
return result;
}


template<typename QF>
float find_optimal_partition_louvain_with_gain(QF quality_function) {
return find_optimal_partition_louvain_with_gain_detail(
quality_function,
gen(quality_function)
);
}

希望这对您有所帮助!

关于c++ - 如何在不使用 C++0x auto 的情况下实现这种类型特定的对象生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com