gpt4 book ai didi

c++ - 有一个模板参数,可以是指针类型也可以是非指针类型

转载 作者:可可西里 更新时间:2023-11-01 16:28:05 31 4
gpt4 key购买 nike

假设我有这样的东西:

template <class T>
void do_something(T t){
pass_it_somewhere(t);
t->do_something();
}

现在允许 T 是指针或非指针类型会很有用。函数do_something(...) 基本上可以处理指针和非指针,除了t->do_something()。对于指针,我需要一个 ->,对于非指针,我需要一个 . 来访问成员。

有没有办法让 T 接受指针非指针?

最佳答案

您可以创建一个取消引用机制,如下所示:

template<typename T>
std::enable_if_t<std::is_pointer<T>::value, std::remove_pointer_t<T>&> dereference(T& t) {
return *t;
}

template<typename T>
std::enable_if_t<!std::is_pointer<T>::value, T&> dereference(T& t) {
return t;
}

并在您的函数中将其用作:

template <class T>
void do_something(T t){
pass_it_somewhere(dereference(t));
dereference(t).do_something();
}

Live Demo

这样你就只需要处理 T 的具体版本。

关于c++ - 有一个模板参数,可以是指针类型也可以是非指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917819/

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