Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何确定强类型';s基类型为std::array<;char,N>;仅使用标准库_C++_Templates_Typetraits_Stdarray - Fatal编程技术网

C++ 如何确定强类型';s基类型为std::array<;char,N>;仅使用标准库

C++ 如何确定强类型';s基类型为std::array<;char,N>;仅使用标准库,c++,templates,typetraits,stdarray,C++,Templates,Typetraits,Stdarray,要为任意大小的字符数组扩展base\u is\u char\u array 与使用完全不同的解决方案是的基础。但由于我无法控制的原因,我只能使用标准库 除了迭代到一个固定的最大数组大小之外,我没有主意了 #include <array> #include <iostream> template< class Derived > auto base_is_char_array(){ return std::is_base_of<std::arra

要为任意大小的字符数组扩展
base\u is\u char\u array

与使用
完全不同的解决方案是
的基础。但由于我无法控制的原因,我只能使用标准库

除了迭代到一个固定的最大数组大小之外,我没有主意了

#include <array>
#include <iostream>

template< class Derived > auto base_is_char_array(){
    return std::is_base_of<std::array<char, 10>, Derived>::value;
}

int main() {
    class tester : std::array<char, 10>{};
    std::cout << base_is_char_array<tester>() << std::endl;
    std::cout << base_is_char_array<int>() << std::endl;
}
#包括
#包括
模板自动基\u是\u字符\u数组(){
return std::是::value的_base_;
}
int main(){
类测试器:std::array{};
std::cout给出了
std::is\u base\u of
的可能实现。您可以使用相同的技术实现
base\u is\u char\u数组

namespace details {
    template <std::size_t N>
    std::true_type  test_ptr_convertible_to_char_array(const volatile std::array<char, N>*);
    std::false_type test_ptr_convertible_to_char_array(const volatile void*);
 
    template <typename>
    auto test_base_is_char_array(...) -> std::true_type;
    template <typename D>
    auto test_base_is_char_array(int) ->
        decltype(test_ptr_convertible_to_char_array(static_cast<D*>(nullptr)));
}
 
template <typename Derived>
struct base_is_char_array :
    std::integral_constant<
        bool,
        std::is_class<Derived>::value &&
        decltype(details::test_base_is_char_array<Derived>(0))::value
    > { };
名称空间详细信息{
模板
std::true_type test_ptr_convertible_to_char_array(const volatile std::array*);
std::false_type test_ptr_convertible__to_char_数组(const volatile void*);
模板
自动测试_base_是_char_数组(…)->std::true_类型;
模板
自动测试\u基本\u是\u字符\u数组(int)->
decltype(test_ptr_convertible_to_char_数组(static_cast(nullptr)));
}
模板
结构基本数组是字符数组:
积分常数<
布尔,
std::is_class::value&&
decltype(详细信息::test_base_是_char_数组(0))::值
> { };

我觉得如果您是从std::array继承的,那么您大多数时候都犯了一些错误。这当然不应该太常见,所以不想问这个问题。也许这会有所帮助