Разрешение области для статической функции или указателя в классе шаблона
В настоящее время я работаю над кодом, написанным кем-то другим, и я не уверен в эффективности их метода. У них есть шаблонный класс, который использует разрешение области для доступа к членам класса вместо того, чтобы иметь указатель на шаблонизированный класс и обращаться к нему таким образом. Например:
template <typename T>
class A {
void func() {
T::DoSomething();
}
};
class B {
static void DoSomething() {
// code...
}
};
Я лично чувствую, что это затрудняет понимание класса шаблона, но моя основная область запросов - это производительность. Что является более эффективным; с использованием разрешения области или с закрытой переменной-членом A::T* p_blah
и звонит B
использование функции p_blah->DoSomething()
?
1 ответ
Разрешение области - это то, что происходит полностью во время компиляции. Метод, используемый в этом коде, приводит к прямому, встроенному вызову функции. Вы не можете победить это.
Ваше предложение:
- Требует, чтобы экземпляр B был создан как-то
- Требует, чтобы указатель на этот экземпляр либо сохранялся в
A
(увеличение его размера) или в глобальном масштабе (всегда проблематично) - Внедряет необходимость отслеживать время жизни этого экземпляра
Короче говоря, у него мало шансов быть таким же эффективным, как у вас сейчас.