gpt4 book ai didi

c++ - 没有对象参数特化的模板函数

转载 作者:行者123 更新时间:2023-11-30 02:31:07 26 4
gpt4 key购买 nike

我想专门化一个模板函数来接受非指针类型,如果万一它得到一个指针,我想在没有 * 的情况下调用它。

我想知道是否有不使用 std::remove_pointer 的方法。

例如我想做这样的事情:

template<typename T>
void setName() {
name = __PRETTY_FUNCTION__;
}

template<typename T>
void setName<T*>() {
setName<T>();
}

name 被定义为私有(private)数据成员。

最佳答案

您的想法是正确的,但在 C++ 中不允许部分函数模板特化。幸运的是,部分类模板特化是允许的,因此您可以使用静态方法解决方法(请参阅下面的 setName_impl 特化),如果需要,还可以使用函数模板包装器(请参阅下面的 setName()):

template<typename T>
struct setName_impl{
static void exec() { }
};

template<typename T>
struct setName_impl<T*>{
static void exec() {
setName<T>::exec();
}
};

template<typename T>
void setName() {
setName_impl<T>::exec();
}

关于c++ - 没有对象参数特化的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37977616/

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