Şablon bağımsız değişkenine bağlı olarak bir yöntemi derlemek veya engellemek için bir yol var mı? 2, 3 veya daha fazla boyutu işleyebilen bir Koordinat sınıfı oluşturmaya çalışıyorum. Ben x()
, y()
ve z()
olarak acces yöntemleri sağlamak istiyoruz, ama ben, ben için z()
kullanımını önlemek için bir static_assert
kullanmak boyut (Aşağıda da görebileceğiniz gibi) Şimdilik 3. daha büyük olması halinde erişilebilir olmasını z()
yöntemi istiyorum BuDerleme zamanı bağımsız değişkenine bağlı olarak kullanılabilir bir yöntem oluşturma
Coord<int, 2> ci2(0,0);
ci2.z() = 3; // shouldn't compile
static_assert kullanılmadan derlemek kalmaması boyutun 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];
}
};
koordinatları ne yapmak istiyorsunuz, boyutun 2 için z()
ait gizlemek varlığıdır. std :: enable_if etrafında pek çok soru gördüm, ama anladığım kadarıyla belirli aşırı yüklenmeleri etkinleştirmek veya devre dışı bırakmak için kullanmak.
Soru şudur: Bir derleme zamanı bağımsız değişkenine bağlı olarak bir yöntem hazırlamanın veya yapmanın bir yolu var mı?
gibi
std::enable_if
kullanın: Ben c bu etiketlemelisiniz ++ veya C++ 11? – unduOlası kopya: http://stackoverflow.com/questions/6972368/stdenable-if-to-conditionally-compile-a-member-function?lq=1 – Synxis