Разрешение области для статической функции или указателя в классе шаблона

В настоящее время я работаю над кодом, написанным кем-то другим, и я не уверен в эффективности их метода. У них есть шаблонный класс, который использует разрешение области для доступа к членам класса вместо того, чтобы иметь указатель на шаблонизированный класс и обращаться к нему таким образом. Например:

template <typename T>
class A {
void func() {
T::DoSomething();
}
};

class B {
static void DoSomething() {
// code...
}
};

Я лично чувствую, что это затрудняет понимание класса шаблона, но моя основная область запросов — это производительность. Что является более эффективным; с использованием разрешения области или с закрытой переменной-членом A::T* p_blah и звонит Bиспользование функции p_blah->DoSomething()?

0

Решение

Разрешение области — это то, что происходит полностью во время компиляции. Метод, используемый в этом коде, приводит к прямому, встроенному вызову функции. Вы не можете победить это.

Ваше предложение:

  • Требует, чтобы экземпляр B был создан как-то
  • Требует, чтобы указатель на этот экземпляр либо сохранялся в A (увеличение его размера) или в глобальном масштабе (всегда проблематично)
  • Внедряет необходимость отслеживать время жизни этого экземпляра

Короче говоря, у него мало шансов быть таким же эффективным, как у вас сейчас.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]