gpt4 book ai didi

c++ - 尝试支持文字时构造函数重载歧义

转载 作者:行者123 更新时间:2023-11-30 03:37:00 26 4
gpt4 key购买 nike

代码

#include <iostream>

template <typename Type>
class MyContainer
{
private:
Type contained;
public:
MyContainer<Type>(Type & a): contained(a) { std::cout << "&\n"; }
MyContainer<Type>(Type a): contained(a) { std::cout << "_\n"; }
};

class Epidemic
{
private:
int criticality;
public:
Epidemic(int c): criticality(c);
};

int main()
{
// using objects //
Epidemic ignorance(10);
MyContainer<Epidemic> testtube(ignorance); // should print "&"; error instead

// using primitive //
double irrationalnumber = 3.1415;
MyContainer<double> blasphemousnumber(irrationalnumber); // should print "&"; error instead

// using literal //
MyContainer<double> digits(123456789.0); // prints "_"
}

描述

MyContainer<Type>(Type & a) 适用于大多数情况。但是,它不适用于文字(例如 1.732 )。这就是我添加 MyContainer<Type>(Type a) 的原因。但是,通过添加它,我最终会产生歧义,因为非文字可以使用任一构造函数。


问题

Is there a way to satisfy all parameters (both literal and non-literal) given to a constructor?

最佳答案

只需将值类型参数更改为const 引用即可:

template <typename Type>
class MyContainer
{
private:
Type contained;
public:
MyContainer<Type>(Type & a): contained(a) { std::cout << "&\n"; }
MyContainer<Type>(const Type& a): contained(a) { std::cout << "_\n"; }
// ^^^^^ ^
};

关于c++ - 尝试支持文字时构造函数重载歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387922/

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