Вопрос

Ладно,

Вот что я пытаюсь сделать...Прямо сейчас он компилируется, но не удается связать...LNK2001

Я хочу, чтобы методы были статическими, потому что в них нет переменных-членов, однако я также хочу, чтобы они были встроенными для ускорения, которое они обеспечивают.

Каков наилучший способ сделать это?Вот что у меня есть в двух словах:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

Я пытаюсь сделать это, потому что хочу иметь возможность уйти:

foo::bar(myFloatPtr);

foo не имеет никаких переменных-членов...в этом нет смысла.

Это было полезно?

Решение

Если вы вызываете bar из другого cpp-файла, отличного от foo.cpp, он должен быть в заголовочном файле.

Другие советы

Во-первых, я бы поместил их в namespace вместо этого, потому что в этом вообще нет никакой логики "class".Во-вторых, вы можете определить тело функций непосредственно в заголовочном файле, чтобы компилятор мог их видеть.В противном случае вам нужно whole program optimization должно быть выполнено компоновщиком для встраивания этих функций (AFAIK).

Вы должны определить свою встроенную функцию в заголовочном файле, а не в отдельном файле реализации.Определения необходимы, когда файл заголовка #включен, если, в конце концов, предполагается, что они будут встроены.

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

Обычно встроенные функции реализуются там, где они объявлены (в заголовочном файле).Компилятор может свободно использовать встроенные функции в том виде, в каком они у вас есть, но вы не можете сила это для того, чтобы встроить что угодно.Если вы используете Visual C ++, включите "встроить любой подходящий", "генерация кода во время соединения" и "предпочитайте быстрый код".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top