2015-11-13 4 views
1

У меня есть функция, которая создает std::bitset, длина которого является постоянным параметром функции. Это не работает, потому что константа не является «интегральным постоянным выражением». Есть ли способ сделать эту работу?Константы Параметры выражения

Для справки:

void Foo(const std::string &data, const unsigned int size) { 
    std::bitset<size> Bar(data); 
    // Do something 
    return; 
} 
+1

Вы можете сделать Foo в функции шаблона и сделать размер несимвольным параметром. размер должен быть известен во время компиляции, иначе это не сработает. –

+1

Нет, не с 'std :: bitset'. Для этого требуется постоянная * compile-time *. Вы можете использовать 'vector ' или ['boost :: dynamic_bitset'] (http://www.boost.org/doc/libs/1_59_0/libs/dynamic_bitset/dynamic_bitset.html) или аналогичные. –

+0

Я так и думал. Мне очень нравится мой «битсет», потому что я могу выполнять побитовые логические операции и однобитовые логические операции с ними, но если это невозможно сделать, это невозможно сделать. – Woody1193

ответ

2

Размер std::bitset потребности быть evaulable во время компиляции. Вы можете сделать это достаточно большим (в случае, если вы знаете максимальный размер, который вам может понадобиться) или используйте другую альтернативу, например boost::dynamic_bitset, как предложил Игорь Тандетник.

+0

Да, я знаю максимальный размер, который мне нужен, но реализация, которую я хочу, по-прежнему зависит от размера, поэтому я перейду с помощью boost: dynamic_bitset. благодаря – Woody1193