Избегайте слабых vtable предупреждений для классов, определенных только в исходном файле - PullRequest
0 голосов
/ 22 мая 2018

Я понимаю, что классу нужен как минимум одна виртуальная функция, определенная в исходном файле ( вне строки ), в противном случае vtable нужно будет вставить в каждый объектный файл.

У меня следующая ситуация:

//foo.cpp

struct Foo {
virtual int Bar() { return 1; }
virtual ~Foo() = default;
};

Модель кода лягушки в Qt Creator (4.5.2) выдает предупреждение -Wweak-table для Foo.
Строго говоря, предупреждение верно, так какvtable будет включен в каждую единицу перевода.Практически это бесполезно, потому что в любом случае vtable в любом случае генерируется только в foo.o.

Как отключить -Wweak-vtables только для классов, определенных в исходном файле?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Оказывается, что автономный clang делает правильные вещи по умолчанию, только модель кода clang в Qt создателе показывает бесполезное предупреждение.Он уже отмечен как QTCREATORBUG-19741 , поэтому ничего не остается, как ждать обновленной версии создателя Qt.

0 голосов
/ 22 мая 2018

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

Под окнами:

#pragma warning(push)
#pragma warning(disable : 4820)
//Rest of your includes (cstdio, vector...)
#pragma warning(pop) //For /Wall

Под gcc вроде:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
//Rest of your includes (cstdio, vector...)
#pragma GCC diagnostic pop
...