我想提取成员指针指向的成员的类型。
template<someType myClass::*member>
void demo(myClass& instance, void* ptr) {
instance.*member = *reinterpret_cast<someType*>(ptr); // can the someType in this line be deduced from member?
}
我尝试decltype
按照评论中的建议使用,但是我对此有疑问:
instance.*member= static_cast<decltype(instance.*member)>((*buffer)[offset]);
buffer
是一个std::shared_ptr<std::vector<uint8_t>>
,
someType
是uint32_t
我收到以下错误消息:
错误:从类型'__gnu_cxx::__alloc_traits >::value_type {aka unsigned char}'到类型'uint32_t& {aka unsigned int&}'的无效静态转换</p>
据我了解decltype(instance.*member)
,member
定义为uint32_t instance::*member
产生参考 uint32_t&
而不是uint32_t
. 我试图按值传递实例,但错误仍然存在。但是,我知道std::remove_reference
,我首先不明白参考是如何出现的。
如果我可以在someType
没有类实例的情况下提取 ,进一步的改进将是。但是我不知道如何实现这一点,而我可以通过 std lib 获得没有指针的类,例如:
template <T*>
struct removePointer {
typedef T type;
}
我不知道如何以我可以在someType
不知道课程的情况下获得课程的一部分的形式编写此内容。我可以写类似下面的东西,但是我仍然必须明确地传递类 naem 和 typename,有没有办法自动提取这些?此外,以下内容首先没有编译(http://ideone.com/8VlKO4):#include using namespace std;
template <class C,typename T, T C::*v>
struct getPointerType {
typedef T type;
};
class Test {
int value;
};
int main() {
int Test::*member=nullptr;
cout << typeid(getPointerType<Test, int, decltype(member)>::type) << std::endl;
return 0;
}