- isystem для Visual Studio MS компилятор C++

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

проблема, которую Вы видите, должно оценить семантику типа. Каждая переменная типа значения / ссылка является новым экземпляром. То, когда Вы говорите

Struct obItem = MyList[1];

, что происходит, - то, что новый экземпляр структуры создается, и все участники копируются один за другим. Так, чтобы у Вас был клон MyList[1] т.е. 2 экземпляров. Теперь при изменении obItem он не влияет на оригинал.

obItem.Name = "Gishu";  // MyList[1].Name still remains "peter"

Теперь терпят меня в течение 2 минут здесь (Это требует времени для проглатывания.. это сделало для меня:) При реальной необходимости в структурах, которые будут сохранены в наборе и изменены как Вы обозначенный в Вашем вопросе, необходимо будет заставить структуру представить интерфейс ( Однако, это приведет к упаковке ). Можно тогда изменить фактическую структуру через интерфейсную ссылку, которая относится к помещенному в коробку объекту.

следующий фрагмент кода иллюстрирует то, что я просто сказал выше

public interface IMyStructModifier
{
    String Name { set; }
}
public struct MyStruct : IMyStructModifier ...

List<Object> obList = new List<object>();
obList.Add(new MyStruct("ABC"));
obList.Add(new MyStruct("DEF"));

MyStruct temp = (MyStruct)obList[1];
temp.Name = "Gishu";
foreach (MyStruct s in obList) // => "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";
foreach (MyStruct s in obList) // => "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}

HTH. Хороший Вопрос.
Обновление: @Hath - у Вас был я работающий, чтобы проверить, пропустил ли я что-то что простой. (Это было бы непоследовательно, если свойства метода set не делают и методы сделали-.Net вселенная все еще сбалансирована:)
Метод установщика не работает
, obList2[1] возвращает копию, состояние которой было бы изменено. Исходная структура в списке остается неизмененной. Таким образом, Набор через интерфейс, кажется, только способ сделать это.

List<MyStruct> obList2 = new List<MyStruct>();
obList2.Add(new MyStruct("ABC"));
obList2.Add(new MyStruct("DEF"));
obList2[1].SetName("WTH");
foreach (MyStruct s in obList2) // => "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}
10
задан Mathias 18 August 2017 в 15:30
поделиться

1 ответ

Нет, MSVC не имеет эквивалента -isystem .


посмотрите на вывод команды cl /? :

/ wd отключить предупреждение n

/ мы рассматриваем предупреждение n как ошибку

/ дважды выдает предупреждение n один раз

/ w устанавливает уровень предупреждения 1-4 для n

. Обратите внимание, что это отключает предупреждения для всего вашего проекта; Я помню, что при использовании Qt я бы предпочел изменить его основной заголовок с помощью #pragma warning disable и снова включить в конце, чтобы я мог видеть все предупреждения для моего собственного источника.

Edit автор редактировал свой вопрос, обновленный ответ: нет способа получить ваш код с предупреждениями и код Qt без предупреждений с использованием флагов компилятора: как вы собираетесь сообщить компилятору, что является «вашим» кодом?

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

Так что я остаюсь с ответ выше; это не совсем красиво, но я уверен, что это единственный способ: использовать #pragma в начале и в конце заголовка (ов) Qt. Либо измените заголовки Qt (даже более уродливо), либо выберите менее инвазивный способ, например:

//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"

пример "shutuppqt.h"

#ifdef MSVC
  #pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
  //....
#endif

пример "enableallwarnings.h"

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif
1
ответ дан 4 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: