Как я могу сказать компилятору не создавать временный объект?

В настоящий момент это кажется невозможным, потому что ссылка org.springframework.data.neo4j.repository.query.filter.PropertyComparisonBuilder, по-видимому, позволяет игнорировать регистр только для "SIMPLE_PROERTY" (равно или равно). См. Метод canIgnoreCase в том же классе:

private boolean canIgnoreCase(Part part) {
    return part.getType() == SIMPLE_PROPERTY && String.class.equals(part.getProperty().getLeafType());
}

Исправление идет с пружиной 5.2 (Мур): https://jira.spring.io/browse/DATAGRAPH-1190 [ 115]

7
задан Graeme Perrow 6 February 2009 в 16:48
поделиться

2 ответа

Используйте explicit ключевое слово в вещи конструктор.

class thing {
public:
    explicit thing( int x ) {
        printf( "Creating a thing(%d)\n", x );
    }
};

Это предотвратит компилятор от неявного вызова вещи конструктор, когда это найдет целое число.

11
ответ дан 6 December 2019 в 21:20
поделиться

explicit ключевое слово работает отлично в моем примере, но я понял позже, что мой код реального мира перестал работать на перегруженном методе, не конструкторе. (Мой отказ для выяснения у вопроса, который был подобен, но не то же как, моя фактическая проблема.) Как Mark Ransom указал в комментариях к принятому ответу, explicit только работы над конструкторами. Я придумал обходное решение, которое решило мою проблему, таким образом, я полагал, что отправлю ее здесь. Новый пример кода:

class thing {
  public:
    thing( int x ) {
        printf( "Creating a thing(%d)\n", x );
    }
};

class X {
  public:
    void do_something( const thing &t ) {
        printf( "Creating an X from a thing\n" );
    }
};


int main( int, char ** ) {
    thing a_thing( 5 );
    X an_x;
    an_x.do_something( 6 );
    return 1;
}

Этот код показывает тот же вывод исходным кодом, но я не могу использовать explicit зафиксировать его. Вместо этого я добавил закрытый метод, который берет int:

  private:
    void do_something( int x );

Теперь, компилятор не создает временный объект, он дает ошибку, потому что я пытаюсь назвать закрытый метод снаружи класса.

1
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

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