में लागू रूपांतरण निम्नलिखित कोड को देखते हुए, संकलक Bar
का निर्माण करते समय निहित रूपांतरण को क्यों हल नहीं करता है? यही है, Foo
का निर्माण a
जैसा बनाया गया था जिसे Bar
बनाने के लिए उपयोग किया जाना चाहिए?सी ++
#include <string>
class ImplicitlyConvertToChar
{
public:
ImplicitlyConvertToChar(const char* a_char)
: m_string(a_char)
{ }
ImplicitlyConvertToChar(const char* a_char, size_t a_end)
: m_string(a_char)
{
}
template <typename T_String>
ImplicitlyConvertToChar(T_String const& a_string)
: m_string(a_string.begin())
{
}
operator char const *() const
{ return m_string; }
const char* m_string;
};
class Foo
{
public:
Foo(const ImplicitlyConvertToChar& a_charLike)
: m_string(a_charLike)
{ }
const char* m_string;
};
class Bar
{
public:
Bar(const Foo& a_foo)
: m_foo(a_foo)
{ }
Foo m_foo;
};
int main()
{
Foo a("this works");
Bar b("Why doesn't this?");
}
यह मानक का हिस्सा है, निहित रूपांतरणों को इस तरह से जंजीर नहीं बनाया जा सकता है। आप केवल एक अंतर्निहित रूपांतरण कर सकते हैं। – IronMensan