【发布时间】:2015-05-19 01:19:27
【问题描述】:
TLDR:我有两个模板化类Outer 和Inner。 Inner<X> 可以从X 隐式构造,Outer<Y> 可以从Y 隐式构造。 Outer<Inner<X>> = X() 应该工作吗?
更多详情:
假设我有以下两个类:
template<typename T>
class Inner {
public:
Inner(const T& value) {}
Inner(T&& value) {}
};
template<typename T>
class Outer {
public:
Outer(const T& value) {}
Outer(T&& value) {}
};
考虑以下函数:
struct SomeType{};
Outer<Inner<SomeType>> DoSomethingFails() {
SomeType value;
return value;
}
g++ 抱怨:
no viable conversion from 'SomeType' to 'Outer<Inner<SomeType> >'
note: candidate constructor not viable: no known conversion from 'SomeType' to 'const Inner<SomeType> &' for 1st argument
但如果我改为执行以下操作:
Outer<Inner<SomeType>> DoSomethingWorks() {
SomeType value;
return Inner<SomeType>(value);
}
它有效。期望DoSomethingFails 工作是否合理?如果不是,为什么?并且可以以DoSomethingFails 工作的方式更改代码吗?
【问题讨论】:
标签: c++ constructor implicit