NFR*_*RCR 10 c++ templates c++11
是否可以根据模板参数的常量有条件地启用模板类的非const/const数据成员?或者可能有一些条件typedef?我想过将std :: enable_if与std :: is_const一起使用,但是我没有使用std :: is_not_const.
class A;
template <typename T>
class Test
{
A& m_a; // If T != const.
const A& m_a; // If T == const.
};
Run Code Online (Sandbox Code Playgroud)
请注意,总是T!= A.
jro*_*rok 12
是的,你可以使用std::conditional:
template <typename T>
class Test
{
typename
std::conditional<std::is_const<T>::value, const A&, A&>::type
m_a;
};
Run Code Online (Sandbox Code Playgroud)
是的,你可以这样做.该<type_traits>头有工具用于这一目的.
template <typename T>
class Test
{
typename std::conditional<
std::is_const<T>::value,
typename std::add_const<A>::type,
typename std::remove_const<A>::type
>::type m_a;
};
Run Code Online (Sandbox Code Playgroud)
你甚至可以为此目的做一个帮手:
//T is type to modify
//S is source type to mimic
struct mimic_const<T, S>
{
public:
typedef typename std::conditional<
std::is_const<S>::value,
typename std::add_const<T>::type,
typename std::remove_const<T>::type
>::type type;
};
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
template <typename T>
class Test
{
typename mimic_const<A, T>::type m_a;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |