相关疑难解决方法(0)

在模板中使用模板别名而不是模板

从上一个问题:

执行static_assert模板类型是另一个模板

Andy Prowl为我提供了这个代码,允许我static_assert模板类型是另一种模板类型:

template<template<typename...> class TT, typename... Ts>
struct is_instantiation_of : public std::false_type { };

template<template<typename...> class TT, typename... Ts>
struct is_instantiation_of<TT, TT<Ts...>> : public std::true_type { };

template<typename T>
struct foo {};

template<typename FooType>
struct bar {
  static_assert(is_instantiation_of<foo,FooType>::value, ""); //success
};

int main(int,char**)
{
  bar<foo<int>> b; //success
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.

但是如果我改变这样的代码来使用别名foo,事情会变得糟糕:

template<template<typename...> class TT, typename... Ts>
struct is_instantiation_of : public std::false_type { };

template<template<typename...> class TT, typename... Ts>
struct is_instantiation_of<TT, TT<Ts...>> : public …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

11
推荐指数
1
解决办法
2859
查看次数

模板别名上is_same_template的奇怪行为

以下程序......

#include <iostream>
#include <type_traits>

template <typename T>
struct Template{};

template <typename T>
using Alias = Template<T>;

template
    <
        template <typename>
        class T1,
        template <typename>
        class T2
    >
struct is_same_template : std::false_type{};

template
    <
        template <typename>
        class T
    >
struct is_same_template<T, T> : std::true_type{};

int main() {
    std::cout << std::boolalpha;
    std::cout << "Template == Template: " << is_same_template<Template, Template>::value << std::endl;
    std::cout << "Template == Alias: " << is_same_template<Template, Alias>::value << std::endl;
    std::cout << "Alias == Alias: " << is_same_template<Alias, …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11 template-aliases

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

标签 统计

c++ ×2

c++11 ×2

templates ×2

template-aliases ×1