Si vous pouvez modifier votre Class
, vous pouvez ajouter un constructeur de conversion basé sur des modèles. Vous pourrez alors compiler la ligne commentée comme écrit dans votre exemple. Notez cependant qu'il n'est généralement pas recommandé d'utiliser des conversions implicites sans raison décente car elles peuvent entraîner des bogues difficiles à repérer (cf. les lignes directrices de base C ++ ).
#include <string>
#include <iostream>
template <typename Type>
struct Class
{
Type data;
Class(Type data) : data(data) { }
template<typename Other>
Class(Other other_data) : data(other_data) {}
};
int main()
{
Class<std::string> a = std::string("abc");
Class<std::string> b = "abc";
Class<std::string> c = a;
std::cout << b.data << std::endl;
return 0;
}
Si vous pouvez utiliser C ++ 14, vous pouvez utiliser le std::literals::string_literals::operator""s
et supprimer le constructeur de conversion. Ensuite, votre ligne ressemblerait à ceci:
using namespace std::literals;
Class<std::string> b = "abc"s;
Code en direct ici .