указатель на static как параметр шаблона / создание шаблона с использованием строки ac

0

Я знаю, что этот код злой, я знаю, что я не должен этого делать, я знаю, что я буду гореть в кодере для этого, но в любом случае:

Как известно, можно использовать 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();
}

который имеет два недостатка:

  1. двойные указатели
  2. я должен определить значения (содержимое строк) далеко от того, где я их использую

совершенным было бы

printer<"bla"> print;

но компилятору, очевидно, это не нравится

может ли кто-нибудь помочь мне преодолеть хотя бы последнюю "проблему",

редактирование Я использую g++ 4.8.0

Теги:
string
pointers
templates
static

1 ответ

1
Лучший ответ

Если вам действительно нужно использовать его в качестве аргумента шаблона, вот вам новая попытка! :)

Редактировать:

http://ideone.com/NGgXxT

template<char... str>
struct staticString {
    static std::string c_str() {
        return std::string{str...}.c_str();
    }
};

В принципе, char... variadic должен делать трюк.

  • 0
    я просто получаю сообщение error: could not convert template argument при попытке использовать этот класс ...
  • 0
    @Valerij Ну, это компилируется в IDEone :).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню