に使用する場合はtrueを返す関数を作成する最も簡単な方法は、私はクライアントからこの関数を呼び出すための最良の方法ですC++ 11:常に関数の引数
template <typename Entity>
class SomeCollection
{
// ....
template <typename Measure, typename Filter>
Entity maximalEntity(Measure&& measure, Filter&& requirement)
{
auto maxEntity = Entity();
auto maxValue = -std::numeric_limits<double>::infinity();
for (auto ent /* some iteration method*/)
{
auto measurement = measure(ent);
if (requirement(ent) && measurement > maxValue)
std::tie(maxEntity, maxValue) = std::make_tuple { ent, measurement };
}
return maxEntity;
}
// ...
};
何次のテンプレートメンバ関数を使用したいですフィルタ要件なしのコード(最大要素を持つため)?
私が思い付くことができる最高は次のとおりです。
class Something;
double measure(Something&);
SomeCollection<Something> collection;
auto maximum = collection.maximalEntity(measure, [](const Something&) { return true; });
しかし、私は、このラムダ関数が無い改善することができると思いますか?
すばらしい答えです。ちょうどニックピッキング(または多分スタイルの問題):C++ 11のバージョンでは 'struct always_true_t'を作成してから' const always_true_t always_true'を作成することができます – bolov