根據模板參數,是否有編譯方法的方法? 我正在嘗試創建一個可以處理2,3或更多維度的座標類。我想提供訪問方法爲x()
,y()
和z()
,但我想z()
只有在維度大於3時纔可訪問。現在(如下所示),我使用static_assert
來防止將z()
用於尺寸2.根據編譯時參數提供方法
template<typename DataType, int Dimension>
class Coord
{
private:
std::array<DataType, Dimension> _data;
public:
// how to achieve some kind of compile_if()
DataType& z()
{
static_assert(Dimension >= 3, "Trying to access an undefined dimension.");
return _data[2];
}
};
的座標,我想這樣做是z()
隱藏存在了2維,使這一
Coord<int, 2> ci2(0,0);
ci2.z() = 3; // shouldn't compile
並不無需使用static_assert的編譯。 我見過很多關於std :: enable_if的問題,但是我知道它是用來啓用或禁用特定的重載。
問題是:有沒有一種方法來使一個方法可用或不依賴於編譯時參數?
題外話:我應該標記這個爲C++或C++ 11? – undu 2013-03-18 16:13:54
可能的重複:http://stackoverflow.com/questions/6972368/stdenable-if-to-conditionally-compile-a-member-function?lq=1 – Synxis 2013-03-18 16:16:44