簡體   English   中英

具有n個參數的模板專用構造函數

[英]Template Specialized Constructor With n Arguments

我有一個用int模板化的類(即:

template </*...*/, int a> /*...*/

)。 在我的課堂上,我想要一個帶有完全“a”參數的構造函數。 我當然可以使它成為可變的,但如果可能的話,我希望編譯時檢查長度。 我也認為宏黑客可以工作,但我首先尋找內置的C ++功能。

這在C ++中是否可行,如果是這樣的話怎么辦呢?

處理一系列相同類型的值是數組的用途。

你甚至不需要使用原始數組; 使用C ++ 11,您可以使用std::array

例如:

template< int a >
class MyClass
{
public:
    MyClass( std::array< int, a > const& args )
    {}
};

如果您的編譯器不提供std::array那么您可以非常輕松地定義相應的類,或者您可以只使用原始數組:

template< int a >
class MyClass
{
public:
    MyClass( int const (&args)[a] )
    {}
};

嗯,我希望我的位置&正確的存在。 由於某些我無法理解的原因,我總是忘記這種語法。 無論我多少次使用過它。


鑒於OP中的評價是(1)他沒有C ++ 11和(2)他要簡單的聲明語法澄清

MyClass<4> m(0,1,2,3);

一種可能性是使MyClass成為可以由C ++ 03花括號初始化器初始化的聚合,即沒有用戶定義的構造函數:

#include <stddef.h>

typedef ptrdiff_t Size;
typedef Size Index;

template< Size a >
class MyClass
{
public:
    static Size const n = a;
    static Size size() { return n; }

    int elems_[n];
    int operator[]( Index const i ) const { return elems_[i]; }
    int& operator[]( Index const i ) { return elems_[i]; }
};

#include <iostream>
using namespace std;
int main()
{
    MyClass< 3 > x = {100, 200, 300};
    for( int i = 0;  i < x.size(); ++i )
    {
        wcout << x[i] << endl;
    }
}

如果這個解決方案是可以接受的,那么它基本上是重新實現std::array

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM