C言語を学んでから、C++を学んでいるものです。
C++のvectorの再実装をするためにllvmのソースコードリーティングをしています。そこで理解できないコードがあったので質問します。
c++
1template <class _Tp, _Tp __v> 2struct integral_constant { 3 static const _Tp value = __v; 4 typedef _Tp value_type; 5 typedef integral_constant type; 6 operator value_type() const throw() { return value; } // <= これがわからない。 7};
libcxx/type_traits at master · llvm-mirror/libcxx
このクラスにおけるoperatorはどういった意味でしょうか。typedef _Tp value_type;
でvalue_typeを型名として定義して、同名の関数定義?をすることで呼出元としてはどのように使用されるのでしょうか。
こちらをコメントアウトして実際に使ってみましたが、実行結果に差はなかったです。
c++
1namespace ft { 2 3template <class _Tp, _Tp __v> 4struct integral_constant 5{ 6public: 7 static const _Tp value = __v; 8 typedef _Tp value_type; 9 typedef integral_constant type; 10 // operator value_type() const { return value; } 11}; 12 13typedef integral_constant<bool, true> true_type; 14typedef integral_constant<bool, false> false_type; 15 16template <class T> 17struct is_integral : public ft::false_type {}; 18template <class T> 19struct is_integral<const T> : public is_integral<T> {}; 20template <class T> 21struct is_integral<volatile T> : public is_integral<T> {}; 22template <class T> 23struct is_integral<const volatile T> : public is_integral<T> {}; 24 25template<> struct is_integral<unsigned char> : public true_type {}; 26template<> struct is_integral<unsigned short> : public true_type{}; 27template<> struct is_integral<unsigned int> : public true_type{}; 28template<> struct is_integral<unsigned long> : public true_type{}; 29template<> struct is_integral<unsigned long long> : public true_type{}; 30template<> struct is_integral<signed char> : public true_type{}; 31template<> struct is_integral<char> : public true_type{}; 32template<> struct is_integral<short> : public true_type{}; 33template<> struct is_integral<int> : public true_type{}; 34template<> struct is_integral<long> : public true_type{}; 35template<> struct is_integral<long long> : public true_type{}; 36template<> struct is_integral<wchar_t> : public true_type{}; 37}
c++
1#include "my_is_integral.hpp" 2#include <iostream> 3 4int main() 5{ 6 std::cout << ft::is_integral<int>::value << std::endl; 7 std::cout << ft::is_integral<unsigned int>::value << std::endl; 8 return 0; 9}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/07 07:05
2022/01/07 07:07
2022/01/07 07:11
2022/01/07 07:18
2022/01/07 07:27