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++ 将模板化智能指针类型作为模板参数传递_C++_Templates - Fatal编程技术网

C++ 将模板化智能指针类型作为模板参数传递

C++ 将模板化智能指针类型作为模板参数传递,c++,templates,C++,Templates,我试图将smart_指针作为模板参数传递,而不是将该类型用于动态转换等 但是还有一个catch-smart_指针可以有很多类型,比如std::shared_ptr、boost::shared_ptr、std::weak_ptr等等 因此,我最后尝试的是用正确的语法替换typename SmartPointerType: template < typename SmartPointerType<DerivedClass> > std::vector<SmartPoin

我试图将smart_指针作为模板参数传递,而不是将该类型用于动态转换等

但是还有一个catch-smart_指针可以有很多类型,比如std::shared_ptr、boost::shared_ptr、std::weak_ptr等等

因此,我最后尝试的是用正确的语法替换
typename SmartPointerType

template < typename SmartPointerType<DerivedClass> >
std::vector<SmartPointerType<DerivedClass>> filterByType()
{
    std::vector<SmartPointerType<DerivedClass>> newList;
    for ( int i = 0; i < iTerrainList.size(); i++)
    {
        SmartPointerType<DerivedClass> castedTerrain = Cast<DerivedClass>(iTerrainList[i]);
        if ( castedTerrain )
            newList.push_back(castedTerrain);
    }

    return newList;
}
template
std::vector filterByType()
{
std::向量新列表;
对于(int i=0;i
“Cast()”接受我感兴趣的任何类型的智能指针

我发现我可以用

template <template <typename Type> class TemplateType>
模板
但它在我的c++03编译器中不起作用


我知道我可以使用“.get()”,但我很好奇,没有“.get()”,我怎么能让它工作呢

让它在任何类型上工作即可:

template <typename DerivedClassPtr>
std::vector<DerivedClassPtr> filterByType()
{
    std::vector<DerivedClassPtr> newList;
    for ( int i = 0; i < iTerrainList.size(); i++)
        if ( DerivedClassPtr terrain = Cast<typename DerivedClassPtr::element_type>(iTerrainList[i]) )
            newList.push_back(terrain);

    return newList;
}
模板
std::vector filterByType()
{
std::向量新列表;
对于(int i=0;i
此处,对模板类型的要求是:

  • 可以存储在向量中(因此必须是可复制的)
  • 具有
    元素类型
    (因此,不管好坏,原始指针都不起作用;您可以使用自己在C++03中实现的类型特征来修复此问题)
  • 被您的
    Cast()函数接受
  • 在布尔上下文中可用

只需让它在任何类型上工作即可:

template <typename DerivedClassPtr>
std::vector<DerivedClassPtr> filterByType()
{
    std::vector<DerivedClassPtr> newList;
    for ( int i = 0; i < iTerrainList.size(); i++)
        if ( DerivedClassPtr terrain = Cast<typename DerivedClassPtr::element_type>(iTerrainList[i]) )
            newList.push_back(terrain);

    return newList;
}
模板
std::vector filterByType()
{
std::向量新列表;
对于(int i=0;i
此处,对模板类型的要求是:

  • 可以存储在向量中(因此必须是可复制的)
  • 具有
    元素类型
    (因此,不管好坏,原始指针都不起作用;您可以使用自己在C++03中实现的类型特征来修复此问题)
  • 被您的
    Cast()函数接受
  • 在布尔上下文中可用