Является ли законным объявлять лишь некоторые, но не все перегрузки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли законным объявлять лишь некоторые, но не все перегрузки?

Сообщение Anonymous »

Я работаю над большим проектом (нереальный двигатель, но это не имеет значения здесь), где я хочу свести к минимуму время компиляции (особенно для живого Intellisense). Таким образом, я уменьшаю зависимости заголовка, заменяя заголовок, включающие в себя с заявлениями прямого, где это возможно. Но законно ли просто объявлять некоторые, но не все перегрузки? < /P>

Код: Выделить всё

// foo.cpp

const char* foo(bool) { return "bool"; }
const char* foo(int)  { return "int"; }
Если я включаю заголовок или если я объявляю все перегрузки, исходный файл вызов Foo выглядит так (после препроцессора, если используется, включите):

Код: Выделить всё

// main.cpp

const char* foo(bool);
const char* foo(int);

int main()
{
std::cout 
Если я объявляю только перегрузку, которую я использую, будет выглядеть так: < /p>
// main.cpp

const char* foo(bool);

int main()
{
std::cout 
// main.cpp

// no const char* foo(bool) declaration
const char* foo(int);

int main()
{
// This calls `foo(int) overload
// But would have called `foo(bool)`
// if all the declarations would have been visible

std::cout 
// foo.h

const char* foo(bool);
inline const char* foo(int) { return "int"; }

// foo.h will be included in other TUs
< /code>
// foo.cpp
const char* foo(bool)  { return "bool"; }
< /code>
// main.cpp

const char* foo(bool);

int main()
{
std::cout 
// foo.cpp
const char* foo(int)  { return "int"; }
< /code>
// main.cpp

const char* foo(int);

int main()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79769322/is-it-legal-to-forward-declare-just-some-but-not-all-of-the-overloads[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»