如何将低级别const应用于模板变量。我正在尝试编写一个const_cast实现

时间:2016-08-10 22:13:17

标签: c++ templates c++11

如何在失败的代码中传递此 function test ($response) { require_once 'TestThread.php'; $rev = new TestThread($response); $rev->start(); } ?我在static_assert周围尝试了const的所有排列,但我无法获得T。编译器始终将其解释为const int *

int * const

2 个答案:

答案 0 :(得分:6)

您可以使用std::conditional正确处理指针类型。

using CT = typename std::conditional<
                std::is_pointer<T>::value,
                typename std::remove_pointer<T>::type const *,
                T const
            >::type;
static_assert(std::is_same<CT,const int *>::value, "CT is not const int*");

答案 1 :(得分:2)

为了完整起见,你可以写一个专门用于指针的类型特征:

template <class T> struct const_qualify     { using type = T const; };
template <class T> struct const_qualify<T*> { using type = T const*; };
template <class T> struct const_qualify<T&> { using type = T const&; };

然后:

using CT = typename const_qualify<T>::type;

在这种情况下,引用特化并不是很有用,因为你不能在引用中粘贴引用,但是为了完整性。