gpt4 book ai didi

c++ - 在指向成员的指针和指向常量成员的指针之间转换

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:51 24 4
gpt4 key购买 nike

我试过搜索这个,但我想到的每个术语最终都得到完全不相关的结果。

我有一个函数(模板)将指向成员的指针作为参数,但我似乎无法隐式地将指向的成员视为常量。使用 const_cast 可行,但我想尽可能避免显式调用它。

struct MyStruct
{
int *_array;
int _size;
};

template<typename C, typename T>
void DoSomething(T* C::* arr, int siz)
{
// do some read-only stuff with the member here
}

template<typename C, typename T>
void ConstDoSomething(T* C::* arr, int siz)
{
DoSomething<C, T const>(arr, siz);
// DoSomething<C, T const>(const_cast<T const* C::*>(arr), siz); // works
}

MyStruct ms;
ConstDoSomething<MyStruct const, int>(&MyStruct::_array, ms._size); // note: cannot convert ‘arr’ (type ‘int* MyStruct::*’) to type ‘const int* MyStruct::*’

这是一个简化的示例,它演示了我在使用更复杂的类树时遇到的问题。我试图避免强制转换,因为调用代码(例如,使用类模板的人)需要它。


更新:当我第一次发布这个时,我不小心使用了一个没有产生相同错误的代码示例。我进行了大量测试以确定根本原因,这是因为我在模板参数中添加了 const 限定符。上面的示例现在正确地演示了我正在使用的行为。

最佳答案

你用什么编译器?我试过你的代码 Visual Studio 2012 和 2013,编译时没有任何警告或错误。无论哪种方式——当你使用 constness 时,你应该尝试 const_cast 而不是 static_cast

关于c++ - 在指向成员的指针和指向常量成员的指针之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com