Не являющиеся членами статические шаблонные определения методов в C ++? - PullRequest
3 голосов
/ 24 октября 2010

Можно ли вызвать статическую шаблонную функцию, не являющуюся членом, из статической функции-члена, где определение разбито на заголовок и cpp:

// zero.cpp

class Zero
{
    static void zero() { one(5); }
};

// one.h

template <typename T>
static void one(T& var);

// one.cpp

template <typename T>
void one(T& var) { }

// main.cpp

...

Zero::zero()

...

У меня проблемы с установкой ссылки, я получаюнеопределенная ссылка на функцию, которую я пытаюсь определить в one.cpp.

Изначально я думал, что это связано с проблемой пространства имен, но все файлы теперь находятся в одном пространстве имен.Я делаю что-то в корне не так?

Ответы [ 2 ]

4 голосов
/ 24 октября 2010

Определения шаблонов должны быть видны в момент создания экземпляра.То есть он должен быть как-то в шапке:

// one.hpp

template <typename T>
static void one(T& var)
{
    // definition visible in header
}

Хотя я не уверен, почему вы хотите, чтобы он был статичным.

2 голосов
/ 24 октября 2010

В дополнение к ответу GMan я хотел бы отметить, что вы не можете заставить T& связываться с таким значением, как целочисленный литерал 5, который имеет тип int. 5 не будет связываться с int&, но будет связываться с const int&.

...