gpt4 book ai didi

c++ - 根据模板是指针/引用还是无来选择函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:15 25 4
gpt4 key购买 nike

我想根据函数是指针、引用还是常规类型提供不同的实现。到目前为止,这是我的代码:

template<class T,
class = typename std::enable_if_t<std::is_reference<T>::value>>
void f(T && in)
{}

// This causes redefinition error
template<class T,
class = typename std::enable_if_t<std::is_pointer<T>::value>>
void f(T && in)
{}

template<class T,
class = typename std::enable_if_t<!std::is_reference<T>::value>,
class = typename std::enable_if_t<!std::is_pointer<T>::value>>
void f(T && in)
{}

中间函数导致:

12:13: error: redefinition of 'template void f(T&&)'

7:13: note: 'template void f(T&&)' previously declared here

有趣的是只有第一个和最后一个函数一起编译。

关于如何修复它或简化此代码的任何想法。

最佳答案

通常的方法是提供适当的重载:

#include <iostream>

template <class T> void f(T&&) {
std::cout << "T&&\n";
}

template <class T> void f(T*) {
std::cout << "T*\n";
}

template <class T> void f(T&) {
std::cout << "T&\n";
}

int main() {
int i;
f(std::move(i));
f(&i);
f(i);
}

这会产生以下输出:

[temp]$ clang++ -std=c++11 test.cpp
[temp]$ ./a.out
T&&
T*
T&
[temp]$

关于c++ - 根据模板是指针/引用还是无来选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523817/

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