Я знаю, что этот код злой, я знаю, что я не должен этого делать, я знаю, что я буду гореть в кодере для этого, но в любом случае:
Как известно, можно использовать int
в качестве template parmerer
например std::get
. Я хотел бы использовать char *
template<char * str>
struct printer {
void operator() () const {
std::cout<<str;
}
};
до сих пор с помощью этой статьи мне удалось получить эту компиляцию и запуск
template<char ** str>
struct printer {
void operator() () const {
std::cout<< *str;
}
};
extern char * bla;
char * bla = (char *)"bla content";
int main() {
printer<&bla> print;
print();
}
который имеет два недостатка:
совершенным было бы
printer<"bla"> print;
но компилятору, очевидно, это не нравится
может ли кто-нибудь помочь мне преодолеть хотя бы последнюю "проблему",
редактирование Я использую g++ 4.8.0
Если вам действительно нужно использовать его в качестве аргумента шаблона, вот вам новая попытка! :)
Редактировать:
template<char... str>
struct staticString {
static std::string c_str() {
return std::string{str...}.c_str();
}
};
В принципе, char...
variadic должен делать трюк.
error: could not convert template argument
при попытке использовать этот класс ...