C言語を学んでから、C++を学んでいるものです。
C++のvectorの再実装をするためにllvmのソースコードリーティングをしています。そこで理解できないコードがあったので質問します。
c++
template <class _Tp, _Tp __v> struct integral_constant { static const _Tp value = __v; typedef _Tp value_type; typedef integral_constant type; operator value_type() const throw() { return value; } // <= これがわからない。 };
libcxx/type_traits at master · llvm-mirror/libcxx
このクラスにおけるoperatorはどういった意味でしょうか。typedef _Tp value_type;
でvalue_typeを型名として定義して、同名の関数定義?をすることで呼出元としてはどのように使用されるのでしょうか。
こちらをコメントアウトして実際に使ってみましたが、実行結果に差はなかったです。
c++
namespace ft { template <class _Tp, _Tp __v> struct integral_constant { public: static const _Tp value = __v; typedef _Tp value_type; typedef integral_constant type; // operator value_type() const { return value; } }; typedef integral_constant<bool, true> true_type; typedef integral_constant<bool, false> false_type; template <class T> struct is_integral : public ft::false_type {}; template <class T> struct is_integral<const T> : public is_integral<T> {}; template <class T> struct is_integral<volatile T> : public is_integral<T> {}; template <class T> struct is_integral<const volatile T> : public is_integral<T> {}; template<> struct is_integral<unsigned char> : public true_type {}; template<> struct is_integral<unsigned short> : public true_type{}; template<> struct is_integral<unsigned int> : public true_type{}; template<> struct is_integral<unsigned long> : public true_type{}; template<> struct is_integral<unsigned long long> : public true_type{}; template<> struct is_integral<signed char> : public true_type{}; template<> struct is_integral<char> : public true_type{}; template<> struct is_integral<short> : public true_type{}; template<> struct is_integral<int> : public true_type{}; template<> struct is_integral<long> : public true_type{}; template<> struct is_integral<long long> : public true_type{}; template<> struct is_integral<wchar_t> : public true_type{}; }
c++
#include "my_is_integral.hpp" #include <iostream> int main() { std::cout << ft::is_integral<int>::value << std::endl; std::cout << ft::is_integral<unsigned int>::value << std::endl; return 0; }
まだ回答がついていません
会員登録して回答してみよう