std::tuple_size
और std::tuple_element
के विशिष्ट प्रकार के लिए अनुमति है? मुझे लगता है कि यह है, लेकिन मैं पूरी तरह से सुनिश्चित होना चाहता हूं, और मुझे कोई ठोस जानकारी नहीं मिल रही है।सी ++: क्या std :: tuple_size/tuple_element विशिष्ट हो सकता है?
उदाहरण (नामस्थान, सदस्य कार्य करता है और get<I>
भार के छोड़े गए):
template <typename T, size_t N>
struct vector { T _data[N]; };
template<size_t I, typename T, size_t N>
constexpr T& get(vector<T,N>& vec) { return vec._data[I]; }
namespace std {
template<typename T, size_t N>
class tuple_size< vector<T,N> > : public std::integral_constant<size_t, N> { };
template<size_t I, typename T, size_t N>
class tuple_element< I, vector<T,N> > { public: using type = T; };
}
मैं की जरूरत है कि संरचित बाइंडिंग साथ प्रयोग के लिए: उपयोगकर्ता परिभाषित प्रकार के लिए
void f(vector<T,3> const& vec)
{
auto& [x,y,z] = vec;
// stuff...
}
ध्यान दें कि ऐसा करने के लिए नई 'ऑटो [ए, बी, सी] 'संरचित बाइंडिंग सुविधा का उपयोग करने के लिए सी ++ 1z में ऐसा करना आवश्यक है। – Yakk