Я борюсь со следующей ситуацией.вызовы функций в аргументах шаблона
#include "systemc.h"
template<int maxval>
class Foo {
/* Error: calls to constructors and functions cannot be part of a constant expression */
sc_uint<int(log2(double(maxval)))> a;
...
};
int main() {
Foo<10> foo;
...
return 0;
}
Как вы можете видеть выше, шаблонный шаблон Foo имеет параметр шаблона «maxval». «Foo» также содержит член, снова шаблонный класс, который использует параметр шаблона «maxval» вместе с функцией «log2» в своих аргументах шаблона для создания экземпляра. Однако изображенный код не будет работать, например, вызовы функций не могут быть частью постоянных выражений. Вы видите какую-либо возможность оценить, например. log2 (maxval) во время компиляции и использовать результат для дальнейших аргументов шаблона внутри 'Foo'?
Благодарим за помощь. (Я использую GCC 4.1.2)
GCC 4.1 намного старше, чем поддержка constexpr. –
Хороший момент, извините, не заметил этого. Вам нужно либо обновить свой компилятор (что вам обязательно нужно сделать, если у вас есть опция, потому что 4.1 очень старый и не поддерживает много новых функций), либо используйте решение @ Florian. Я обновлю ответ, чтобы это отразить. –
@ Stjepan: Большое спасибо за ваши предложения! Я думаю, что мне нужно пойти с шаблоном, поскольку «constexpr» не работает для меня, даже с GCC5.2.0 – chessat2002