首頁 > 後端開發 > C++ > 為什麼我不能在 C 中使用非常量變數作為模板參數?

為什麼我不能在 C 中使用非常量變數作為模板參數?

Susan Sarandon
發布: 2024-10-29 08:53:30
原創
701 人瀏覽過

 Why can't I use a non-constant variable as a template argument in C  ?

非常量模板參數難題

嘗試將非常量變數作為模板參數傳遞時(例如以下程式碼片段中的i),編譯器會出現問題錯誤:

<code class="cpp">template <int a>
void modify() {}

for (int i = 0; i < 10; i++) {
    modify<i>(); // error: 'i' cannot appear in constant-expression
}</code>
登入後複製

錯誤原因:

模板在編譯期間擴展,這需要在編譯時評估其參數。由於 i 在迴圈內被修改,編譯器無法在編譯時確定其值,導致錯誤。

替代實作:

無需實現所需的迭代更改API 接口,請考慮實現以下內容:

<code class="cpp">#include <iostream>

template<int i>
void modify()
{ std::cout << "modify<" << i << ">" << std::endl; }

template<int x, int to>
struct static_for
{
    void operator()() 
    {  modify<x>();  static_for<x+1,to>()(); }
};

template<int to>
struct static_for<to,to>
{
    void operator()() 
    {}
};


int main()
{
    static_for<0,10>()();
}</code>
登入後複製

此版本利用遞歸來模擬迭代。透過為每個值實例化專門的模板函數(例如,modify、modify 等),程式碼模擬從 i=0 到 i=9 的循環行為。

Non - 常數模板參數解析:

要使用可變參數VAR(由函數計算確定)呼叫修改,請考慮使用具有可變參數的模板函數,如下:

<code class="cpp">template <typename T>
void modify(const T& x)
{ std::cout << "modify(" << x << ")" << std::endl; }

int main()
{
    auto VAR = ...; // computed from some functional process
    modify(VAR);
}</code>
登入後複製

以上是為什麼我不能在 C 中使用非常量變數作為模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板