gpt4 book ai didi

c++ - 将模板类型名转换为 uint64

转载 作者:行者123 更新时间:2023-11-28 05:11:54 25 4
gpt4 key购买 nike

我有这个函数可以读取内存,并返回位于指定地址的字符串(或驻留在内存中的任何类型)。但我收到错误:

错误:从“uint64_t”到“const char*”的无效转换

我做错了什么?我以前见过它是以这种方式完成的。这是我正在尝试做的代码:

template<typename T>
T ReadMemory(uint64_t addr, size_t size)
{
uint64_t some_address = addr;
size_t string_size = size;
uint64_t return_value;
//store address contents into return_value using driver

//cast typename on return_value
return (T)return_value;
}

int main()
{
string foo = ReadMemory<string>(some_address,some_size);
}

最佳答案

注意:不要投C风格

由于您使用的是 C++,因此您应该避免像 (type) value 这样的 C 风格。参见 Why use static_cast(x) instead of (int)x?对于类似 C++ 的版本。

现在让我们来解决您的问题。

模板特化

想法是为每个使用的通用类型专门化一个模板。

你的标题可以包含

template<typename T>
T ReadMemory(uint64_t addr, size_t size);

并且您的实现包含

/* type is std::string */
template<>
std::string ReadMemory(uint64_t addr, size_t size){
uint64_t some_address = addr;
size_t string_size = size;
uint64_t return_value;
//store address contents into return_value using driver

//cast typename on return_value
return std::to_string(return_value);
}

/* type is uint64_t */
template<>
unit64_t ReadMemory(uint64_t addr, size_t size){
uint64_t some_address = addr;
size_t string_size = size;
uint64_t return_value;
//store address contents into return_value using driver

//cast typename on return_value
return return_value;
}

等等你想要实现的所有类型。参见 How do I explicitly instantiate a template function?了解更多信息。

C++17 解决方案

C++17 将添加一个名为 if constexpr 的惊人新功能。只要编译器支持它,您就可以像这样使用它:

template<typename T>
T ReadMemory(uint64_t addr, size_t size){
uint64_t some_address = addr;
size_t string_size = size;
uint64_t return_value;
//store address contents into return_value using driver

/* type is std::string */
if constexpr (std::is_same<T,std::string>::value){
return std::to_string(return_value);
}
/* type is uint64_t */
if constexpr (std::is_same<T,uint64_t>::value){
return return_value;
}
}

关于c++ - 将模板类型名转换为 uint64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334597/

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