2014-10-02 2 views
0

Я пытаюсь передать строку как параметр шаблона C++, но, похоже, я не могу заставить ее работать. Для записи я работаю с библиотекой SystemC (следовательно, все вещи sc_xxx). Согласно this answer, то, что я делаю, должно работать, но я не вижу, что я делаю неправильно. Компилятор говорит мне, что "filePath не может появиться в постоянном" выражение.»Любая помощь будет оценена.Передача строки в качестве параметра шаблона в C++

main.cpp

int sc_main(int argc, char* argv[]) 
{ 
    const char filePath[] = "test.txt"; 
    Interconnect<sc_uint<32>, filePath, 10> myInterconnect; 


    return 0; 
} 

interconnect.h

template<class T, const char filePath[], unsigned nPortPairs = 10> 
SC_MODULE(Interconnect) 
{ 
public: 
... 
}; 
+0

Итак, вы едете только на Audi, никогда больше ничего? –

+0

Да, это более старая модель; мой первый и единственный автомобиль. – audiFanatic

ответ

2

Ваш filePath - локальная автоматическая переменная, и поэтому ее адрес является функцией времени выполнения. Шаблону нужен адрес, известный во время компиляции. В C++ 03 также была проблема с привязкой, я не полностью ure но я думаю проблема связи была исправлена ​​в C++ 11.

Простым решением является позволить файловому пути быть обычным аргументом конструктора.

0

Я вижу две отличия между тем, что вы делаете, и ответом, на который вы предоставили ссылку.

  1. Ваша константа строки является локальной переменной. В другом ответе это глобальная переменная.
  2. Ваш шаблонный параметр является массивом const char. В другом ответе это const char *.

Я предполагаю, что вам просто нужно устранить эти различия.

Я нашел another resource, что, кажется, подтверждает мои догадки.

Смежные вопросы