Dize sayısını belirtilen dizinlerde öğeleriyle sıralamak için bir şablon yazıyorum. Çalıştığım bir kod var, ancak kullanmak için bir acı çünkü tuple öğelerini sıralamak için kullanılan ikili işlev türünü belirtmem gerekiyor. Ben doğrusu böyle tekrarından kaçınmak için aşağıdaki gibi bir arayüz olurdu, yerineKısmi şablon türü indirimi
sort_by_index<std::less<char>, 0>(std::less<char>());
: Ben başlığın ilk elemana göre sıralamak istiyorsanız
template <typename BinaryFunction, int Index>
struct sort_by_index_t {
explicit sort_by_index_t(const BinaryFunction& binary_function)
: binary_function(binary_function) {}
template <typename Tuple>
bool operator()(const Tuple& left, const Tuple& right) const {
return binary_function(std::get<Index>(left),
std::get<Index>(right));
}
private:
const BinaryFunction binary_function;
};
template <typename BinaryFunction, int Index>
sort_by_index_t<BinaryFunction, Index>
sort_by_index(const BinaryFunction& binary_function) {
return sort_by_index_t<BinaryFunction, Index>(binary_function);
}
Yani, yazmak zorunda ama şu anda derleme değil.
sort_by_index<0>(std::less<char>());
otomatik olarak Index
anlamak için bir yol görmüyorum (ve gereksiz olurdu), ancak sort_by_index
BinaryFunction
tipini anlamak gerekir.
Yukarıdakileri nasıl yeniden yazabilirim, böylece BinaryFunction
türünü belirtmem gerekmez.
C++ 'da en iyi kullanıcı olarak, lütfen bana en iyi kitabı öğrenebilirsiniz C++? – Shafizadeh
@Shafizadeh [Definitive C++ Kitap Rehberi ve listesi] (http://stackoverflow.com/q/388242/2069064) – Barry
Ben, ben order_by (projection, base_order = std :: less <>) 'yerine uygulamak projeksiyon desteği ile reimplement 'std :: sort'. – Yakk