gpt4 book ai didi

c++ - 函数指针的函数模板特化

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:33 26 4
gpt4 key购买 nike

我有一个清理功能,我只想在(传统)指针类型上运行。

我的问题是函数模板,我可以将函数限制为仅指针,但是由于函数指针和常规指针之间的转换规则不同,我遇到了问题。

Sanitize() 函数需要针对大量类型运行,其中一些是指针,需要进行清理,另一些是不同元数和参数类型的函数指针,应该不被清理,其中一些是非指针数据类型,也不应该被清理。

有什么明显的我遗漏的吗?

  template<typename T>
T* Sanitize(T* value)
{
return (T*)SanitizePointer(value); //SanitizePointer returns void*, so cast is necessary
}

template<typename T>
T Sanitize(T value)
{
return value; //Non-pointers can be passed without sanitization
}

int main()
{

int a;
int* b;
int (*c)();

Sanitize(a);
Sanitize(b);
Sanitize(c); //<- ERROR

return 0;
}

最佳答案

虽然这个问题可以手动解决,但最容易使用 Boosts 类型特征和 SFINAE如果 T* 是一个函数指针,有选择地禁用指针重载的助手:

template<typename T>
typename boost::disable_if<boost::is_function<T>, T*>::type
Sanitize(T* value)
{
// ...
}

关于c++ - 函数指针的函数模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794640/

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