Здравствуйте, Аноним, Вы писали:
А>Есть нечто вроде
А>struct S{ А> int operator[]( int i ){ ... } А>};
А>Хочу сделать, чтобы помимо этого была специализация для случая, когда в качестве i передаётся константа 0.
Если i известно только в рантайме (что, скорее всего, так и есть), то подойдет только такая "специализация":
HgLab: Mercurial Server and Repository Management for Windows
Re[2]: Как шаблон сделать
От:
Аноним
Дата:
27.07.05 14:51
Оценка:
Здравствуйте, Нахлобуч, Вы писали:
Н>Здравствуйте, Аноним, Вы писали:
А>>Есть нечто вроде
А>>struct S{ А>> int operator[]( int i ){ ... } А>>};
А>>Хочу сделать, чтобы помимо этого была специализация для случая, когда в качестве i передаётся константа 0.
Н>Если i известно только в рантайме (что, скорее всего, так и есть), то подойдет только такая "специализация":
Н>
Да, вот только шаблон для оператора хотелось бы. Причём, чтобы в зависимости от того переменная или 0 передаются в оператор, выбиралась соответствующая специализация.
Re: Как шаблон сделать
От:
Аноним
Дата:
27.07.05 14:58
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Есть нечто вроде
А>struct S{ А> int operator[]( int i ){ ... } А>};
А>Хочу сделать, чтобы помимо этого была специализация для случая, когда в качестве i передаётся константа 0.
по-моему в compile-time никак. только if (i == 0) ...
Здравствуйте, <Аноним>, Вы писали:
А>struct S{ А> int operator[]( int i ){ ... } А>}; А>Хочу сделать, чтобы помимо этого была специализация для случая, когда в качестве i передаётся константа 0.
Здравствуйте, Аноним, Вы писали:
А>Да, вот только шаблон для оператора хотелось бы. Причём, чтобы в зависимости от того переменная или 0 передаются в оператор, выбиралась соответствующая специализация.
Если я правильно понял, то вот это поможет:
struct int_wrapper
{
int_wrapper(int i);
...
};
struct S{
int operator[]( int_wrapper i ); // (1)int operator[]( void* ); // (2)
};
int main()
{
S s;
s[0]; // (2)
s[1]; // (1)int i = 0;
s[i]; // (1)
s[++i];// (1)return 0;
}
Владик wrote:
> Здравствуйте, Аноним, Вы писали: > > А>Да, вот только шаблон для оператора хотелось бы. Причём, чтобы в зависимости от того переменная или 0 передаются в оператор, выбиралась соответствующая специализация. > > Если я правильно понял, то вот это поможет: >
> struct int_wrapper
> {
> int_wrapper(int i);
> ...
> };
>
> struct S{
> int operator[]( int_wrapper i ); // (1)
> int operator[]( void* ); // (2)
> };
>
> int main()
> {
> S s;
> s[0]; // (2)
> s[1]; // (1)
> int i = 0;
> s[i]; // (1)
> s[++i];// (1)
> return 0;
> }
>
>
Компиляторы пишут не глупые, поэтому выпендриваться не стоит.
Владик wrote:
> Здравствуйте, MaximE, Вы писали: > > ME>Никаких if'ов для вызовов с константами в следующем коде: > > И чего? Практическая ценность предложенного решения стремится к нулю, я не спорю. Но причем здесь оптимизации на уровне кодогенератора?
В том, что не нужно пытаться экономить на спичках или пытаться предсказать, во что скомпилируется код. Если есть сомнения — смотри в asm.
Здравствуйте, MaximE, Вы писали:
>> Но причем здесь оптимизации на уровне кодогенератора? ME>В том, что не нужно пытаться экономить на спичках или пытаться предсказать, во что скомпилируется код. Если есть сомнения — смотри в asm.
А. Ну я так понял (по привычке ), что compile-time критично.