相关疑难解决方法(0)

使用gcc 4.4的模板模板参数和可变参数模板

我在Debian上使用gcc 4.4.请考虑以下代码.

#include <map>
#include <string>
using std::map;
using std::string;

// Args lets the user specify additional explicit template arguments
template <typename T,
      template <typename T, typename... Args> class C,
      typename... Args>
C<T, Args...> foo()
{
  C<T, Args...> x;
  return x;
}

int main(void)
{
  map<string, int> a = foo<string, map, int>();
}
Run Code Online (Sandbox Code Playgroud)

所以,这里的想法是T匹配string,C匹配map和模板参数包Args匹配int.我可能有一些错误的语法,如果是这样,请更正.特别是,如果希望第一个模板参数class C匹配T而其余模板参数匹配模板参数包Args,template <typename T, typename... Args> class C …

c++ template-templates variadic-templates c++11

10
推荐指数
1
解决办法
6434
查看次数

使用可变参数模板获取/释放的RAII模式

我试图用一个模板化的类来替换我的所有"获取/发布"RAII类(我现在每种资源都有一个).获取的一般形式是一些类型是Acquire(),一些是Acquire(p1),一些是Acquire(p1,p2)等.Release也是如此.但是,如果资源是使用参数获取的,则需要使用相同的参数释放它.

我想我可以使用可变参数模板,将参数存储在元组中.当然,我已经贬低了语法.有人可以帮忙吗?

#include <tuple>

template<class T, typename... Args>
class Raii
{
public:

    Raii(T * s, Args&& ... a) : subect(s), arguments(a)
    {
        subject->Acquire(arguments);
    }

    ~Raii()
    {
        subject->Release(arguments);
    }

private:

    T subject;
    std::tuple<Args...> arguments;
};

class Framebuffer
{
public:

    void Acquire() {}
    void Release() {}
};

class Sampler
{
public:

    void Acquire(int channel) {}
    void Release(int channel) {}
};

class Buffer
{
public:

    void Acquire(int target, int location) {}
    void Release(int target, int location) {}
};

int main(void)
{
    Framebuffer f; …
Run Code Online (Sandbox Code Playgroud)

c++ raii variadic-templates

5
推荐指数
1
解决办法
162
查看次数

了解完美转发和可变参数模板的片段

我从这个答案中看到了这段代码的片段,我似乎无法理解模板和类型名的排列如何创建main()中显示的最终函数调用.

特别是,可变参数模板模板的安排和std :: forward的使用让我很困惑.

任何人都可以打破这段代码,以便我能更好地理解它吗?

#include <utility>

template <template <typename...> class TemplateClass, typename... Args>
TemplateClass<Args...> make(Args&&... args)
{
    return TemplateClass<Args...>(std::forward<Args>(args)...);
}

int main() 
{
  make<std::pair>(1, 2);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

c++ templates typedef variadic-templates perfect-forwarding

-1
推荐指数
1
解决办法
267
查看次数