簡體   English   中英

我可以將字符串文字轉換為標識符

[英]Can I make string literal into identifier

在Visual C ++中,給出以下函數聲明:

int main();

在函數主體中,我想定義一個與函數的(返回)類型相同的變量,但是假設我不想使用int或main,因此我嘗試了以下操作:

int main() {
    decltype(__identifier(__FUNCTION__)) x;
}

這不起作用,因為__identifier不接受字符串文字。 我可以使用某種方法將字符串文字轉換為標識符嗎? 或者,有沒有一種方法可以在函數體內定義int類型的x,而無需使用返回類型(int)或函數名稱(main)?

實際上,它確實接受字符串文字,但是您必須禁止顯示警告以使其起作用。 你可以這樣做:

#define SYMBOL_FROM_STRING(S) (__pragma(warning(suppress: 4483)) __identifier(S))

decltype(SYMBOL_FROM_STRING(__FUNCTION__)) x;

我可以初始化一個 std::array <uint8_t with a string literal?< div><div id="text_translate"><p> 我寫了很多 C 代碼,使用 UART 串口與儀器交互。 我正在開始一個新項目,我試圖在 C++ 中使用更面向 object 的方法。 這是我過去使用 C 定義和發送命令的方式。</p><pre> uint8_t pubx04Cmd[] = "$PUBX,04*37\r\n"; HAL_UART_Transmit(&amp;hUART1, pubx04Cmd, sizeof(pubx04Cmd), 5000);</pre><p> 這非常簡單。 C++ std::array具有內置的大小,看起來很有用。 但這是我想出如何做到這一點的唯一方法。</p><pre> const char pubx04CString[] = "$PUBX,04*37\r\n"; std::array&lt;uint8_t, 14&gt; pubx04CPPArray; std::copy(std::begin(pubx04CString), std::end(pubx04CString), pubx04CPPArray.begin()); HAL_UART_Transmit(&amp;hUART1, pubx04CPPArray.data(), pubx04CPPArray.size(), 5000);</pre><p> 與 C 方法相比,這似乎相當笨拙。</p><ul><li><p> 使用std::array是否有更清潔的方法?</p></li><li><p> 在這種情況下使用std::array與 C arrays 有什么真正的好處嗎?</p></li></ul></div></uint8_t>

[英]Can I initialize a std::array<uint8_t with a string literal?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 無法創建字符串文字類型 為什么我可以獲取字符串文字的地址,而不是整數文字的地址? 如何找到字符串文字的地址? 我可以確定參數是否為字符串文字嗎? 為什么不能引用指針以用於常量分配字符串文字 如何使變量成為文字字符串 字符串文字和字符文字可以連接嗎? 為什么我可以通過引用而不是數組來調用String Literal? 我可以直接將指針指向char指針嗎? 我可以初始化一個 std::array <uint8_t with a string literal?< div><div id="text_translate"><p> 我寫了很多 C 代碼,使用 UART 串口與儀器交互。 我正在開始一個新項目,我試圖在 C++ 中使用更面向 object 的方法。 這是我過去使用 C 定義和發送命令的方式。</p><pre> uint8_t pubx04Cmd[] = "$PUBX,04*37\r\n"; HAL_UART_Transmit(&amp;hUART1, pubx04Cmd, sizeof(pubx04Cmd), 5000);</pre><p> 這非常簡單。 C++ std::array具有內置的大小,看起來很有用。 但這是我想出如何做到這一點的唯一方法。</p><pre> const char pubx04CString[] = "$PUBX,04*37\r\n"; std::array&lt;uint8_t, 14&gt; pubx04CPPArray; std::copy(std::begin(pubx04CString), std::end(pubx04CString), pubx04CPPArray.begin()); HAL_UART_Transmit(&amp;hUART1, pubx04CPPArray.data(), pubx04CPPArray.size(), 5000);</pre><p> 與 C 方法相比,這似乎相當笨拙。</p><ul><li><p> 使用std::array是否有更清潔的方法?</p></li><li><p> 在這種情況下使用std::array與 C arrays 有什么真正的好處嗎?</p></li></ul></div></uint8_t>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM