将 const 添加到指针类型
Add const to pointer type
假设我有一个 class 模板:
template <class T>
struct A
{
T value;
void foo(auto fun) {
fun(value);
// ^^^^^^^ Pass value as a const object
}
};
我想在调用 fun
时将 const 添加到 value
,以便仅接受 T
、[=15 的函数=], T const*
是可调用的。我最初的方法是使 foo
成为一个 const 成员函数,但这对于引用和指针成员来说是失败的,因为 const 成员函数可以修改它们(你不能对这些成员进行变基)。
我也尝试使用 std::add_const
和 std::as_const
将值传递给参数函数 (fun
) 但这会产生如下转换:
T = MyData* // say T is the type "Pointer to MyData"
add_const<T> = MyData *const // constness is added to the pointer,
// i.e. it becomes constant pointer to MyData
我想在上面的示例中使用的目标类型是 MyData const*
(指向常量 MyData
的指针)。
- 是否有实现此目的的标准工具?
- 有没有不同的方法,我的意思是除了修饰调用之外
fun(value)
?
你可以
fun(static_cast<std::conditional_t<
std::is_pointer_v<T>,
std::add_pointer_t<std::add_const_t<std::remove_pointer_t<T>>>,
std::add_const_t<T>
>
>(value));
那么当T
为MyData*
时,转换后的类型为MyData const*
;对于像 MyData
这样的非指针类型,转换后的类型将是 MyData const
.
假设我有一个 class 模板:
template <class T>
struct A
{
T value;
void foo(auto fun) {
fun(value);
// ^^^^^^^ Pass value as a const object
}
};
我想在调用 fun
时将 const 添加到 value
,以便仅接受 T
、[=15 的函数=], T const*
是可调用的。我最初的方法是使 foo
成为一个 const 成员函数,但这对于引用和指针成员来说是失败的,因为 const 成员函数可以修改它们(你不能对这些成员进行变基)。
我也尝试使用 std::add_const
和 std::as_const
将值传递给参数函数 (fun
) 但这会产生如下转换:
T = MyData* // say T is the type "Pointer to MyData"
add_const<T> = MyData *const // constness is added to the pointer,
// i.e. it becomes constant pointer to MyData
我想在上面的示例中使用的目标类型是 MyData const*
(指向常量 MyData
的指针)。
- 是否有实现此目的的标准工具?
- 有没有不同的方法,我的意思是除了修饰调用之外
fun(value)
?
你可以
fun(static_cast<std::conditional_t<
std::is_pointer_v<T>,
std::add_pointer_t<std::add_const_t<std::remove_pointer_t<T>>>,
std::add_const_t<T>
>
>(value));
那么当T
为MyData*
时,转换后的类型为MyData const*
;对于像 MyData
这样的非指针类型,转换后的类型将是 MyData const
.