Я немного поэкспериментировал со стандартом C ++ 11 и придумал эту проблему:
В C ++ 11 вы можете использовать auto
и decltype
для автоматического получения типа возвращаемого значения для функции, как, например, функции begin()
и end()
ниже:
#include <vector>
template <typename T>
class Container {
private:
std::vector<T> v;
public:
auto begin() -> decltype(v.begin()) { return v.begin(); };
auto end() -> decltype(v.end()) { return v.end(); };
};
Моя проблема в том, что я должен объявить приватное vector<T> v
перед публичным объявлением, что противоречит моему стилю кодирования. Я хотел бы объявить всех своих частных членов после моими открытыми членами. Вы должны объявить вектор перед объявлением функции, потому что выражение в decltype
является вызовом функции-члена вектора begin()
и требует экземпляра объекта.
Есть ли способ обойти это?