コード
#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)
。ただし、これを追加すると、非リテラルはどちらのコンストラクターも使用できるため、あいまいになります。
質問
コンストラクターに与えられたすべてのパラメーター (リテラルと非リテラルの両方) を満たす方法はありますか?