2010-09-18 2 views

ответ

4

f<x> недействителен. Кстати, мой компилятор компилирует вашу шаблонную функцию без плохого вызова.

template<int &n> void f(){ 
    int* ptr = &n; 
} 

int something = 0; 

int main() { 
    f<something>(); // success 
    int x; 
    f<x>(); // C2971: Cannot pass local var to template function 
} 
+0

:). Я должен был быть более осторожным с чтением сообщения об ошибке – Chubsdad

0

Честно говоря, я не могу придумать, как много использовать этот тип конструкции, хотя я уверен, что они, вероятно, существуют. Мне кажется, что вы ограничены, потому что n должно эффективно функционировать в глобальной области видимости для f(). Вы могли бы сделать что-то вроде следующего:

#include <iostream> 

using namespace std; 

template<int &n> void sq(){ 
    n *= n; 
} 

int something = 10; 

int main() 
{ 
    cout << something << endl; 
    sq<something>(); 
    cout << something << endl; 

    return 0; 
} 

, но я не могу видеть, что это действительно собирается дать вам, что не может быть достигнуто с помощью функций без шаблона. Может ли sq() эффективно рассчитать время компиляции?

+0

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

+0

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

Смежные вопросы