C++ 如果数据类型不同,则进行条件编译

C++ 如果数据类型不同,则进行条件编译,c++,templates,C++,Templates,我有一些特定数据类型的模板。现在在x64构建中,类型不同,因此工作正常。对于x32构建,数据类型是相同的,因此我想知道是否只有在数据类型不同的情况下才能进行条件编译 template <> const usize_t NumericColumn<int_t>::MinDefault = (usize_t)INT_MIN; template <> const usize_t NumericColumn<int_t>::MaxDefault = (us

我有一些特定数据类型的模板。现在在x64构建中,类型不同,因此工作正常。对于x32构建,数据类型是相同的,因此我想知道是否只有在数据类型不同的情况下才能进行条件编译

template <> const usize_t NumericColumn<int_t>::MinDefault = (usize_t)INT_MIN;
template <> const usize_t NumericColumn<int_t>::MaxDefault = (usize_t)INT_MAX;
template <> const usize_t NumericColumn<uint_t>::MinDefault = (usize_t)0;
template <> const usize_t NumericColumn<uint_t>::MaxDefault = (usize_t)UINT_MAX;

// May not work in 32 bit build, but so far we don't need this anyway and if it is
// desired, it needs to be adjusted accordingly with an ifdef WIN32/WIN64
template <> const usize_t NumericColumn<ssize_t>::MinDefault = (usize_t)LLONG_MIN;
template <> const usize_t NumericColumn<ssize_t>::MaxDefault = (usize_t)LLONG_MAX;
template <> const usize_t NumericColumn<usize_t>::MinDefault = (usize_t)0;
template <> const usize_t NumericColumn<usize_t>::MaxDefault = (usize_t)ULLONG_MAX;

<>但我想我是否可以用C++来比较这个类型本身,这将是更干净的IMO.如果我使用<代码> StistalyAsStudio我只能产生一个错误,当然这不是我需要的。

< P>我想你正在寻找这个:

enable_if<is_same<uint_t, usize_t>::value>
启用

我想您正在寻找:

enable_if<is_same<uint_t, usize_t>::value>
启用

您所需要的已在标准库中:

template <typename T>
const usize_t NumericColumn<T>::MinDefault = std::numeric_limits<T>::min();
template <typename T>
const usize_t NumericColumn<T>::MaxDefault = std::numeric_limits<T>::max();

您所需要的已在标准库中:

template <typename T>
const usize_t NumericColumn<T>::MinDefault = std::numeric_limits<T>::min();
template <typename T>
const usize_t NumericColumn<T>::MaxDefault = std::numeric_limits<T>::max();

在OP的示例中如何使用它?在OP的示例中如何使用它?我尝试使用
std::numeric\u limits::min()
方法,但由于某些原因,它在VS2010上不起作用(尽管我认为这是正确的方法)。它会与Windows最小/最大宏(IMO是一个编译器错误)混淆,但即使我删除它,仍然会出现引用函数的编译器错误,因此我假设VS2010还没有。我最终基本上使用了您在底部提到的方法,因此我不需要ifdef。@Devolus try
(std::numeric\u limits::min)(
)。注意额外的参数。VS2010肯定有
std::numeric\u limits
。我尝试使用
std::numeric\u limits::min()
方法,但由于某些原因,它在VS2010上不起作用(尽管我认为这是正确的方法)。它会与Windows最小/最大宏(IMO是一个编译器错误)混淆,但即使我删除它,仍然会出现引用函数的编译器错误,因此我假设VS2010还没有。我最终基本上使用了您在底部提到的方法,因此我不需要ifdef。@Devolus try
(std::numeric\u limits::min)(
)。注意额外的参数。VS2010肯定有
std::numeric\u限制
template <typename T>
const usize_t NumericColumn<int32_t>::MinDefault = INT32_MIN;
template <typename T>
const usize_t NumericColumn<uint32_t>::MinDefault = UINT32_MIN;
template <typename T>
const usize_t NumericColumn<int64_t>::MinDefault = INT64_MIN;
template <typename T>
const usize_t NumericColumn<uint64_t>::MinDefault = UINT64_MIN;