gpt4 book ai didi

c++ - 区分函数模板中的按值传递和按引用传递

转载 作者:行者123 更新时间:2023-12-02 14:05:16 26 4
gpt4 key购买 nike

有没有办法让编译器区分传递的变量是否是引用,而无需使用例如显式指定它<int &> ?以下示例显示“1”,而我期望的是“2”:

template <typename Type>
void fun(Type)
{
cout << 1 << '\n';
}

template <typename Type>
void fun(Type &)
{
cout << 2 << '\n';
}

int main()
{
int x = 0;
int &ref = x;
fun(ref);
}

我还尝试使用std::ref ,但我无法让它发挥作用。

最佳答案

template <typename Type, typename = std::enable_if_t<!std::is_reference<Type>::value>>
void fun(Type)
{
std::cout << 1 << '\n';
}

template <typename Type, typename = std::enable_if_t<std::is_reference<Type>::value>>
void fun(Type &)
{
std::cout << 2 << '\n';
}

int main() {

int x = 0;
int &ref = x;
fun<int&>(ref); // Call the one that you want, and don't leave the compiler decide which one you meant

return EXIT_SUCCESS;
}

关于c++ - 区分函数模板中的按值传递和按引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460832/

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