C++ включает файловый браузер

Мои расширения преобразования, которые позволяют Вам делать:

int i = myString.To();

Здесь это, , как отправлено на TheSoftwareJedi.com

public static T To(this IConvertible obj)
{
  return (T)Convert.ChangeType(obj, typeof(T));
}

public static T ToOrDefault
             (this IConvertible obj)
{
    try
    {
        return To(obj);
    }
    catch
    {
        return default(T);
    }
}

public static bool ToOrDefault
                    (this IConvertible obj,
                     out T newObj)
{
    try
    {
        newObj = To(obj); 
        return true;
    }
    catch
    {
        newObj = default(T); 
        return false;
    }
}

public static T ToOrOther
                       (this IConvertible obj,
                       T other)
{
  try
  {
      return Toobj);
  }
  catch
  {
      return other;
  }
}

public static bool ToOrOther
                         (this IConvertible obj,
                         out T newObj,
                         T other)
{
    try
    {
        newObj = To(obj);
        return true;
    }
    catch
    {
        newObj = other;
        return false;
    }
}

public static T ToOrNull
                      (this IConvertible obj)
                      where T : class
{
    try
    {
        return To(obj);
    }
    catch
    {
        return null;
    }
}

public static bool ToOrNull
                  (this IConvertible obj,
                  out T newObj)
                  where T : class
{
    try
    {
        newObj = To(obj);
        return true;
    }
    catch
    {
        newObj = null;
        return false;
    }
}

можно попросить значение по умолчанию (вызовы очищают конструктора или "0" для численных данных) при отказе, определите значение "по умолчанию" (я называю его "другим"), или попросите пустой указатель (где T: класс). Я также предоставил и тихие модели исключения и типичную модель TryParse, которая возвращает bool указание на меры, принятые, и, параметрический усилитель содержит новое значение. Таким образом, наш код может сделать вещи как это

int i = myString.To();
string a = myInt.ToOrDefault();
//note type inference
DateTime d = myString.ToOrOther(DateTime.MAX_VALUE);
double d;
//note type inference
bool didItGiveDefault = myString.ToOrDefault(out d);
string s = myDateTime.ToOrNull();

, я не мог заставить типы Nullable прокручиваться во все это очень чисто. Я попробовал в течение приблизительно 20 минут, прежде чем я признал себя побежденным.

8
задан rmeador 13 July 2009 в 19:16
поделиться

5 ответов

4
ответ дан 5 December 2019 в 15:25
поделиться

Для VS2003 есть флаг / showIncludes ( в свойствах C / C ++ / Advanced). Это напечатает все заголовки, которые включает в себя каждый файл .cpp, и все, что они включают, так что вы можете перейти оттуда.

Я уверен, что в том же месте есть тот же вариант для VS2008.

4
ответ дан 5 December 2019 в 15:25
поделиться

если вы используете компиляторы GCC, попробуйте этот

g++ -M abc.cpp

, он покажет все включаемые зависимости для файла abc.cpp

3
ответ дан 5 December 2019 в 15:25
поделиться

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

Конечно, циклическое включение может вызвать проблемы, поэтому я обнаружил, что такой инструмент, как Visual Assist X (1) помогает в подобных делах. В нем есть функция, которая может находить ссылки на материал, так что вы можете легко отсеять, где что-то определяется / объявляется / включается и т. Д. Он также имеет множество других полезных функций, поэтому я считаю его довольно полезным.

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

HTH

0
ответ дан 5 December 2019 в 15:25
поделиться

Это довольно утомительно, но вы можете выполнить двоичный поиск пути к месту, где происходит #include, используя #error (и #pragma message), чтобы сузить область включения строки, которую тянет третья сторона . Я сделал это в случае одного файла, который пытался отследить, но похоже, что ваша проблема серьезнее, поэтому, вероятно, один из инструментов, упомянутых другими, будет более эффективным.

0
ответ дан 5 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

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