C++ инстанцирует шаблонов в цикле

Это на самом деле походит на IIS Low уровень. Если это будет, то Вы не будете в состоянии записать в любой файл, не просто web.config.

Вот уровни от справочного файла IIS:

  • Полный (внутренний) - Определяет неограниченные полномочия. Дает разрешения приложения ASP.NET получать доступ к любому ресурсу, который подвергается защите операционной системы. Поддерживаются все привилегированные операции.
  • Высокий (web_hightrust.config) - Определяет высокий уровень безопасности доступа к коду, что означает, что приложение не может сделать ни одной из следующих вещей по умолчанию:
    • Вызов неуправляемый код.
    • обслуженные компоненты Вызова.
    • Запись к журналу событий.
    • сервисные очереди Организации очередей сообщений Доступа.
    • ODBC Доступа, OleDb или источники данных Oracle.
  • Носитель (web_mediumtrust.config) - Определяет средний уровень безопасности доступа к коду, что означает, что в дополнение к Высоким Доверительным ограничениям Уровня приложение ASP.NET не может сделать ни одной из следующих вещей по умолчанию:
    • файлы Доступа вне каталога приложения.
    • Получают доступ к реестру.
    • сетевая служба Make или вызовы веб-сервиса.
  • Низкий (web_lowtrust.config) - Определяет низкий уровень безопасности доступа к коду, что означает, что в дополнение к Средним Доверительным ограничениям Уровня приложение не может сделать ни одной из следующих вещей по умолчанию:
    • Запись к файловой системе.
    • Вызов Утверждать метод.
  • Минимальный (web_minimaltrust.config) - Определяет минимальный уровень безопасности доступа к коду, что означает, что приложение имеет, только выполняют полномочия.

я предложил бы, чтобы, если Вы - тупик при наличии установщика, иметь его создали web.config в памяти, которую пользователь может сохранить локально и FTP позже.

5
задан Anycorn 21 November 2009 в 07:55
поделиться

5 ответов

Template parameters have to be compile-time constant. Currently no compiler considers a loop counter variable to be a constant, even after it is unrolled. This is probably because the constness has to be known during template instantation, which happens far before loop unrolling.

But it is possible to construct a "recursive" template and with a specialization as end condition. But even then the loop boundary needs to be compile time constant.

template<int i>
class loop {
    loop<i-1> x;
}

template<>
class loop<1> {
}

loop<10> l;

will create ten template classes from loop<10> to loop<1>.

8
ответ дан 13 December 2019 в 05:37
поделиться

Вероятно, это можно было бы сделать с помощью библиотеки метапрограммирования Boost . Но если вы не использовали его раньше или привыкли к чрезмерному программированию шаблонов, он, вероятно, не будет стоить того объема работы, который потребуется, чтобы научиться это делать.

2
ответ дан 13 December 2019 в 05:37
поделиться

спасибо, ребята.

доктор Хирш ближе всего к тому, что нужно, но в конечном итоге предыдущее решение является самым чистым. Позвольте мне повторить проблему: несколько шаблонов необходимо было создать во время компиляции с использованием постоянных параметров

f0 = f<0,0>();
f1 = f<0,1>();
...
fk = f<m,n>();

для любого значительного числа m, а создание шаблона n развертывания делает код загруженным. С препроцессором Boost я сделал следующее:


#include "boost/preprocessor/seq/for_each_product.hpp"
#include "boost/preprocessor/seq/to_tuple.hpp"


#define SEQ_MASK        (0x1)(0x3)
#define SEQ_M           (1)(2)
#define SEQ_N           (1)(2)

#define INSTANCE(r, tparams) {                                      \
            Kernel kernel = Instance<BOOST_PP_SEQ_ENUM(tparams)>(); \
            kernels[kernel.key()]  = kernel; }

        BOOST_PP_SEQ_FOR_EACH_PRODUCT(INSTANCE, (SEQ_MASK)(SEQ_M)(SEQ_N));

после запуска препроцессора он производит все комбинации трех определенных последовательностей.

2
ответ дан 13 December 2019 в 05:37
поделиться

Я не думаю, что это возможно во время выполнения, потому что MyClass <1> и MyClass <2> - абсолютно разные классы.

Но у меня есть одна идея: если вы знаете все возможные значения, вы можете написать переключите в заводском классе и передайте это целое число в качестве параметра в фабрику.

0
ответ дан 13 December 2019 в 05:37
поделиться

Шаблоны создаются во время компиляции, а не во время выполнения, поэтому вы вообще не можете создать их в цикле.

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: