Как генерировать независимый от операционной системы путь в C++

Вот шаги, которые происходят внутри для обоих вызовов:
(Подсказка: единственное отличие заключается в шаге 3)


new Test():

  1. создать new Object() obj
  2. установить obj.__proto__ в Test.prototype
  3. return Test.call(obj) || obj; // normally obj is returned but constructors in JS can return a value
<час>

Object.create( Test.prototype )

  1. создать new Object() obj
  2. установить obj.__proto__ в Test.prototype
  3. return obj;
<час>

Так в основном Object.create не выполняет конструктор.

8
задан Janusz 29 June 2009 в 02:43
поделиться

4 ответа

Если вы хотите сделать это во время компиляции, вы наверняка можете сделать что-то вроде

#ifdef WIN32
#define OS_SEP '\\'
#else
#define OS_SEP '/'
#endif

Или вы можете просто использовать '/', и все будет отлично работать в Windows (за исключением старых программ, которые проанализируйте строку и работайте только с '\'). Это выглядит смешно, только если отображается для пользователя таким образом.

7
ответ дан 5 December 2019 в 10:04
поделиться

Как это часто бывает, у Boost есть библиотека, которая делает то, что вы хотите. Здесь руководство.

7
ответ дан 5 December 2019 в 10:04
поделиться

Используйте '/' внутри везде. Затем напишите набор служебных функций, которые импортируют путь любой формы с помощью '/'. Напишите функцию «собственный путь», которая имеет специфичные для системы ifdef и необходимые преобразования. который может быть вызван по запросу.

2
ответ дан 5 December 2019 в 10:04
поделиться

Один из простых способов сделать то, о чем вы просили, - создать небольшую (возможно, встроенную) функцию, которая использует магию препроцессора для определения платформы ( #ifdef WIN32 и т. Д.) и возвращает соответствующий символ-разделитель.

Ответ немного сложнее, потому что есть другие более существенные различия, чем символ-разделитель. Файловые системы Windows могут иметь несколько корней (C: \, D: \ и т. Д.), В то время как вся FS имеет корень в / в Unix-land.

Лучшим советом может быть использование boost :: filesystem .

1
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

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