以下代码不起作用,因为推断模板参数F是std::tuple,而我希望它是Foo- 前者采用两个模板参数,后者采用一个.
#include <tuple>
template <typename T>
using Foo = std::tuple<int, T>;
template <template <typename> class F>
void foo(F<std::string> bar) {}
void test() {
foo(Foo<std::string>());
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让类型推断与using语句一起工作而不是Foo变成它自己的类?
#include <tuple>
template <typename T>
class Foo {
std::tuple<int, T> bar;
};
template <template <typename> class F>
void foo(F<std::string> bar) {}
void test() {
foo(Foo<std::string>());
}
Run Code Online (Sandbox Code Playgroud)
我正在使用C++ 17 std::variant以及在单个类型上使用别名类型的别名,我宁愿用using语句声明这些,而不是为每个语句创建包装类.像这样的东西:
// Assuming Plus, Minus, etc all exist
template <typename T>
using Operation …Run Code Online (Sandbox Code Playgroud) 我有一个由模板模板类参数化的类,它具有静态成员函数:
template <template <typename> class F>
struct A {
static int foo();
};
Run Code Online (Sandbox Code Playgroud)
此类没有默认定义foo,必须专门针对不同类型.
我还有一个带有嵌套模板类的模板模板类参数化的另一个类:
template <template <typename> class F>
struct B {
template <typename T>
struct C {};
};
Run Code Online (Sandbox Code Playgroud)
我想C专门A用于任何模板模板类F,专门A不已:
template <template <typename> class F>
struct A<B<F>::template C> {
static int foo();
};
template <template <typename> class F>
int A<B<F>::template C>::foo() {
return A<F>::foo() / 2;
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我有一个专门的课程A:
template <typename T>
struct E {};
template <>
int …Run Code Online (Sandbox Code Playgroud)