请考虑以下代码:
int main(){
MyObject<int> obj;
foo(obj);
}
template <typename T>
void foo(T& objct){
...
}
在foo中,objct
的类型将是myobject
。
我想在foo()
中创建一个变量,它的类型是objct
的泛型,在本例中是int
。
有没有办法做到这一点?谢谢。
编辑不幸的是(我想)我无法重写签名,因为函数foo()
是用不同类型的对象调用的,例如
int main(){
MyObject<int> obj;
MyDifferentObject<int> obj2;
foo(obj);
foo(obj2);
}
我想在foo()中创建一个变量,它的类型是objct的泛型,在本例中是int。有办法做到这一点吗?
如果可以更改函数签名,那么可以这样做:
template <typename T>
void foo(MyObject<T>& objct){
T variable;
如果这不是一个选项,例如,如果您希望foo
也允许其他模板(例如在您编辑的问题中),那么您可以定义一个类型特征:
template<class T>
struct fancy_type_trait
{
};
template<class T>
struct fancy_type_trait<MyObject<T>>
{
using type = T;
};
template<class T>
struct fancy_type_trait<MyDifferentObject<T>>
{
using type = T;
};
template <typename T>
void foo(T& objct){
using V = fancy_type_trait<T>::type;
V variable;
在编写对象时,有没有方法键入对象的属性?与预先定义类型/接口相反。 我唯一能想到的是,但这太宽松了。考虑一下: 我想要<code>myData。myComment</code>抛出相同的错误。 这当然是一个微不足道的例子。但是如果我正在写一个大的复杂的对象,能够动态地声明它的部分类型会很好。
请问其中interface{ *int }是什么语法,看不懂为什么要这么声明
“绑定不匹配:Team类型不是league类型 的有界参数 >的有效替代品。”
我有一个泛型类型K,我想验证K是否实现了接口可比性。这是我的代码: 但是代码不起作用。我不想将所有K限制为实现可比性。我已经有了另一个TreeMapVector相似度类。如果K实现了接口可比性,我将使用TreeMapVector相似度类返回结果。 你认为我如何能解决这个问题?谢了。
rank ▲ ✰ vote url 68 354 80 465 url 查看一个对象的类型 有什么方便的方法查看一个对象的类型? 为了获得对象的类型,可以用内建函数type().把对象作为唯一的参数传递将会返回这个对象的类型: >>> type([]) is list True >>> type({}) is dict True >>> type('') is str True >>> type(
我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。