我不知道为什么会这样,我想根据MyProtocol返回带有数组的参数,所以我尝试通过以下方式实现该目的:
import Foundation
protocol Test {
}
protocol ArrayTest {
associatedtype E : Test
}
extension Array : ArrayTest where Element:Test{
typealias E = Element
}
class BBB {
func ggg<T:ArrayTest>( kk: ((_ value:T) -> Void)?){
}
}
class AAA<T:ArrayTest> {
func ggg(){
BBB().ggg { (test) in//Generic parameter 'T' could not be inferred
here
}
}
}
答案 0 :(得分:2)
您不能只做BBB().ggg { (test: [Test]) in ...
,因为[Test]
不符合ArrayTest
。
如您所写,这可能会让您感到惊讶:
extension Array : ArrayTest where Element: Test{
typealias E = Element
}
上面的扩展名肯定适用于[Test]
,对吗?否。要应用上述扩展名,Element
必须符合Test
,但必须符合Test
does not conform to itself。
我想你可能是这个意思:
class AAA<T:ArrayTest> {
func ggg(){
BBB().ggg { (test: T) in
}
}
}
这使用T
声明中的AAA
。
作为AAA
类的用户,您需要传递符合ArrayTest
的实际类型,例如[U]
,其中U
是符合类型的类型到Test
。
答案 1 :(得分:0)
编译器无法定义通用参数#include<string>
#include<iostream>
using namespace std;
class test_temp
{
public:
static string name;
static int count_of_letters();
};
string test_temp::name="Vishal";
int test_temp::count_of_letters()
{
auto result = []() {return(name.size());};
result();
}
int main() {
int res=test_temp::count_of_letters();
cout<<res<<endl;
}
的类型。您需要明确指定T
的类型:
T