Многострочная широкая строковая константа, которая допускает однострочные комментарии в C ++ - PullRequest
0 голосов
/ 14 февраля 2020

Этот вопрос о том, как разбить (широкую) строковую константу на несколько строк в коде, задавался и отвечался несколько раз на этой платформе ( здесь , например). Я использовал следующий подход для объявления строки шириной c в самом определении класса:

#include <Windows.h>    
#include <iostream>

class Test
{
    public:
        static constexpr WCHAR TEST[] = L"The quick brown fox" \
                                        L"jumped over the" \
                                        L"lazy dog!";
    /* ... */
};

int main ()
{
    wprintf(Test::TEST);
    return 1;
}

Однако этот подход работает не очень хорошо, если вы хотите начать комментировать каждую строку вашего многострочная строка. Единственный способ добиться этого - вставить многострочный комментарий между строкой и обратным символом sh (\) примерно так:

class Test
{
    public:
        static constexpr WCHAR TEST[] = L"The quick brown fox" /* A comment */\
                                        L"jumped over the" /* Another comment*/\
                                        L"lazy dog!";
    /* ... */
};

Если после комментария поместить комментарий backsla sh (\), затем возникает ошибка компилятора. Это означает, что вы не можете использовать традиционный однострочный комментарий (//) с этим методом. На самом деле, если вы ставите один пробел после backsla sh (\), то генерируется ошибка компилятора.

Мой вопрос заключается в следующем, есть ли способ объявить широкую строку в несколько строк, где вы можете использовать однострочные комментарии (//) для комментирования каждой строки?

Я бездельничаю, ища что-то вроде этого (похоже на Java):

static constexpr ... = L"The quick brown fox" +  // A little comment here...
                       L"jumped over the" +      // A little comment there.
                       L"lazy dog!";

Я понимаю, что в Java все невероятно отличается (т.е. именно все является объектом), но я просто привожу это в качестве примера того, чего я добиваюсь.

1 Ответ

1 голос
/ 14 февраля 2020

Просто отбросьте обратную косую черту:

    static constexpr WCHAR TEST[] = L"The quick brown fox" // a comment
                                    L"jumped over the"     // another comment
                                    L"lazy dog!";          // yet another comment

Комментарии заменяются пробелами на этапе перевода 3. Смежные строковые литералы объединяются на этапе перевода 6.

...