我有一個模板化函數,其中模板化參數是一個仿函數。我想生成一些特定於特定質量函數的內部變量,以供其他由此函子調用的模板函數使用。所以我嘗試了auto關鍵字,它似乎工作如何在不使用C++的情況下實現此類型的特定對象生成器0x自動
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;
}
與自動這似乎編譯罰款,這是令人愉快的。我想盡量保持在目前的標準之內,以使我的代碼更加便攜。有沒有一種方法可以使用當前標準進行處理,或者這是BOOST_AUTO能夠處理的事情嗎?我想實現一般功能是基於一個對模板paramater的類型的對象,而無需實際傳遞新的對象的類型進入功能(即推斷它)
感謝
那麼'gen'有很多重載,爲不同的函數類型返回不同的內部函數,並且'do_some_work'的相應重載?你可以引入一個traits類模板,以便每次有人重載'gen'時,他們還會添加一個模板專門化模板class internals_type {typedef internals_for_linearised_functor value; }'。然後使用'typename internals_type :: value internal_variables = ...' –
2011-04-06 16:10:46
總是當我看到這些類型的問題時,我想知道OOP對於程序員來說如何更清晰。具有函子參數的類型特定的對象生成器模板函數。真? – orlp 2011-04-06 16:13:51
@nightcracker:我不認爲這段代碼與OOP有很大關係。面向對象的方式將是爲質量函數定義一個接口,如果內部變量不能真正成爲內部變量,那麼我猜想另一個接口。然後在任何地方使用動態多態,所以'find_optimal_partition_louvain_with_gain'不需要知道內部變量的運行時類型,它只能通過接口類型引用它。 – 2011-04-06 16:16:41