Если поведение системы при такой постановке задачи не прогнозируемо, то лучше поменять постановку задачи, чтобы достигнут 100% конечной цели. Это намного лучше чем искать решение, которое может сработать, а может и нет, а также может спровацировать трудно уловимый баг.
Этот код работает, проверено. Для большей убедительности можно в конструкторе использовать элементы которые инициализуруются статическим конструктором.
namespace Example
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("before static ctor");
C c = new C();
Console.WriteLine("after static ctor");
}
}
class C
{
static C()
{
Console.WriteLine("from static ctor");
}
public C()
{
}
}
}
т. е. создаю и вызываю обычный конструктор, что автоматом вызывает статический
Все зависит от компилятора и длины исходного кода, но в большинстве случаев всегда будет compile-time, но если код слишком большой (как в примере кодирования строк, а у меня в реальном проекте он раза в два больше), то иногда надо увеличить в параметрах длину инлайн функций, как мне пришлось сделать в gcc, а OpenWatcom все чудесно проглотил без проблем
Я не считаю макросы фуфлом, просто они, как вы сказали, слабее шаблонов, я еще добавлю — намного слабее. Да и выглядят макросы не совсем хорошо по сравнением с шаблонами. Сейчас попробовал с помощью макросов сделать вычисление хэша, не получилось, мало того, код выглядит намного ужасней и непонятней. Попробуйте сами хотя бы для 4-х символов и при этом учтите, что может передаваться строка меньшего размера.
Дело в том что наврядли с помощью макросов можно сделать такие вычисления во время компиляции (макросы это ведь подстановки, а шаблоны это уже вычисления). Интересно как можно с помощью макросов определить конец строки? Причем так чтобы дальше не было вычислений.
Макросами не будет красиво и наврядли с помощью них такое возможно сделать. Да и макросы являются наследием С, и для С++ с его шаблонами их не рекомендуют применять. Хотя я может чего-то не знаю, если вы считаете что макросами можно такое сделать, то приведите пример.
С новым стандартом пока сильно не разбирался, но когда уже окончательно утвердять и появится его полная поддержка, то буду копать. Есть еще много задач которые хотелось бы решать с помощью шаблонов.
Ну про первый раз с шаблонами вы явно загнули, я с ними работаю с момента их появления на С++. А насчет дизасма, вы не совсем поняли, цель была в формировании хэшей во время компиляции, естественно никаких шаблонов в результирующем exe не будет, будут только хеши для сравнения и больше ничего не требовалось. Также и со строками, будет только кодированный текст сформированный самим компилятором.
Такое тоже имеет право на жизнь и я об этом знаю, вопрос в том сколько разрядов поместится? В вашем примере малавато будет, в моем примере намного больше, хотя и выглядит похуже, но цель была не в этом
Никому не нужно будет сопровождать, так как проект личный и делался в целях самообразования и поиска нестандартных решений. Так же хотелось прощупать возможности кимпилеров по оптимизации.
Прочти ниже, я не против воли народа, я против последствий, посмотрите что случилось с Украиной после оранжевой революции, сейчас пришел тот против кого протестовали, и сейчас опять полная жопа. Революционеры управляемые англосаксами довели страну до ручки. Посмотрите на Беларуссию и Россию, где там учитывается воля народа? Там ее в корне подавляют.
т. е. создаю и вызываю обычный конструктор, что автоматом вызывает статический