用于类声明的 C++ 模板

标签 c++ oop templates

因此,我可以执行以下操作:

template<typename T>
void printValue(T theValue)
{
     std::cout << theValue;
}

int main()
{
   /.....
   int value = 5; 
   printValue(value); 

   return 0;
}

但是如果我想为一个类做以下事情:

template<class Type_T>
class Foo {

    public:
       template<typename Inverse>
       Foo(Inverse begin, Inverse end)
         : values(begin, end)
       {



       }

    protected:

       std::vector<Type_T> values;
};

int main() {

    std::vector<int> va = {1, 2, 3, 4, 5, 6};

    Foo<int> f(va.begin(), va.end());

    return 0;
}

我必须说明类型。有没有一种方法可以让编译器通过了解正在传递的迭代器的类型来决定类型?

最佳答案

您可以创建一个辅助函数 make_foo(),它根据给定的参数推导出类型:

template<typename U>
Foo<typename U::value_type> make_foo(U first, U last)
{
    return { first, last };
}

auto f = make_foo(va.begin(), va.end());

关于用于类声明的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365564/

相关文章:

php - PHP 中小型代码重用的最佳实践

c++ - 通过不返回引用来防止下标运算符赋值会导致运行时崩溃

azure - ARM 模板 - 存储帐户 - 将专用终结点添加到现有存储帐户

c++ - “struct _ntl_gbigint_body”在哪里定义?

c# - OOP——C# 中的消息传递

C++成员函数调用begin()问题

java - 简单工厂和工厂方法模式的动机

c++ - 为模板类使用别名

c++ - 代码块不正确的 c++ 输出

c++ - 错误的数组初始化与赋值复制构造函数初始化