编译这段代码没有问题:
struct A
{
template<typename T>
void f(int) {}
};
A a;
a.f<double>(42);
但是,具有模板化构造函数的类似代码无法编译:
struct A
{
template<typename T>
A(int) {}
};
A a<double>(42);
Gcc 在最后一行给出以下错误:错误:'<' 标记之前的意外初始化程序
有没有办法让构造函数示例工作?
无法为构造函数显式指定模板,因为您无法命名构造函数。
根据您要执行的操作,可以使用:
#include <iostream>
#include <typeinfo>
struct A
{
template <typename T>
struct with_type {};
template<typename T>
A(int x, with_type<T>)
{
std::cout << "x: " << x << '\n'
<< "T: " << typeid(T).name() << std::endl;
}
};
int main()
{
A a(42, A::with_type<double>());
}
这通过利用类型推导来“欺骗”。
但是,这是非常不正统的,因此可能有更好的方法来满足您的需求。