regex - Несоответствие типа параметра при использовании функции regex_search в C ++ [duplicate]

Вот еще один случай, когда сырые типы вас укусят:

public class StrangeClass<T> {
  @SuppressWarnings("unchecked")
  public <X> X getSomethingElse() {
    return (X)"Testing something else!";
  }

  public static void main(String[] args) {
    final StrangeClass<Object> withGeneric    = new StrangeClass<>();
    final StrangeClass         withoutGeneric = new StrangeClass();
    final String               value1,
                               value2;

    // Works
    value1 = withGeneric.getSomethingElse();

    // Produces compile error:
    // incompatible types: java.lang.Object cannot be converted to java.lang.String
    value2 = withoutGeneric.getSomethingElse();
  }
}

Как уже упоминалось в принятом ответе, вы теряете всю поддержку дженериков в коде необработанного типа. Каждый параметр типа преобразуется в его стирание (которое в приведенном выше примере просто Object).

7
задан lastmjs 15 November 2013 в 17:46
поделиться

6 ответов

g++ myfile.cpp -o myfile && ./myfile
9
ответ дан Kevin 21 August 2018 в 02:22
поделиться
  • 1
    Не совсем одна команда. – John Dibling 15 November 2013 в 17:52
  • 2
    @JohnDibling. ОП указывает «одна строка». а также "одна команда" в вопросе. – JBentley 15 November 2013 в 18:00
  • 3
    OP запросил одну строку , а не одну команду (последняя даже не имеет смысла в терминах shell: технически вышеприведенная команда по-прежнему остается одной командой) – Alexander L. Belikoff 15 November 2013 в 18:01
  • 4
    Хмм, название и вопрос немного разные. – drescherjm 15 November 2013 в 18:13
  • 5
    @ AlexanderL.Belikoff: Еще раз посмотрим на вопрос. – John Dibling 15 November 2013 в 18:18

Это скорее вопрос, связанный с оболочкой, чем вопрос на C ++. В большинстве оболочек существует множество способов цепочки команд. Предполагая, что вы используете bash (попробуйте echo $SHELL, чтобы убедиться), взгляните на хороший учебник bash .

2
ответ дан anjruu 21 August 2018 в 02:22
поделиться
1
ответ дан Digital Trauma 21 August 2018 в 02:22
поделиться

Попробуйте этот хак:

Вставьте эту строку в верхнюю часть файла cpp:

//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";g++ -o "$x" "$0")&&exec "$x" "$@"

Затем добавьте разрешение на выполнение в файле cpp, то есть (chmod +x foo.cpp) , то:

./foo.cpp
4
ответ дан Nim 21 August 2018 в 02:22
поделиться
  • 1
    Ужасное, хотя и интересное (следовательно, +1) решение! Это также не совсем удовлетворяет вопрос OP, так как он требует нескольких команд при создании любого .cpp-файла. – JBentley 15 November 2013 в 18:03
  • 2
    @JBentley, хе-хе, он не предназначен для правильного использования, но он полезен для небольших фрагментов тестов ... О командах, это расщепление волос ...;) – Nim 15 November 2013 в 18:06

Да. Предполагая, что ваша программа на C ++ закодирована в одном файле с именем foo.cpp:

g++ foo.cpp -o foo && ./foo

Примечание: & amp; & amp; означает: выполнить команду справа, только если команда слева преуспела

5
ответ дан Pat 21 August 2018 в 02:22
поделиться
  • 1
    +1 для мышления одного и того же типа & quot; make & amp; & amp; ./foo" если программа не находится в одном файле (и вам нужен make-файл) – Zac 15 November 2013 в 18:06
  • 2
    Makefiles не должны быть реальными файлами - они могут поступать через stdin и bash здесь. stackoverflow.com/a/20006901/2113226 – Digital Trauma 15 November 2013 в 19:35
-2
ответ дан user1074069 21 August 2018 в 02:22
поделиться
Другие вопросы по тегам:

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