Thông thường, nếu tôi cần phát hiện xem loại có là const
Tôi chỉ sử dụng boost::is_const
. Tuy nhiên, tôi gặp rắc rối khi cố gắng để phát hiện các const-ness của một loại lồng nhau. Hãy xem xét các đặc điểm mẫu sau đây, mà là chuyên ngành với nhiều loại const:Phát hiện const-ness của kiểu lồng nhau
template <class T>
struct traits
{
typedef T& reference;
};
template <class T>
struct traits<const T>
{
typedef T const& reference;
};
Vấn đề là boost::is_const
dường như không phát hiện rằng traits<const T>::reference
là một loại const
.
Ví dụ:
std::cout << std::boolalpha;
std::cout << boost::is_const<traits<int>::reference>::value << " ";
std::cout << boost::is_const<traits<const int>::reference>::value << std::endl;
đầu ra này: false false
Tại sao không cho nó xuất false true
?
s/is_cost/is_const / –