`struct decay <t,r(a ...,=“”......)=“”>`的含义是什么?

时间:2017-03-27 13:07:53

标签: c++ templates metaprogramming

import numpy as np

import pandas as pd

import os

import random

from sklearn import tree

from sklearn.metrics import accuracy_score

os.chdir('/home/PYTHON/')
data=pd.read_csv('wine.csv')


test_score=[]
error1=[]
error2=[]
accuracy=[]

n_fold=10

for i in xrange(n_fold):

    train_data = data.sample(frac=0.70,random_state=1)

    test_data = data.loc[~data.index.isin(train_data.index)]    

    tree_model = tree.DecisionTreeClassifier()

    predictors = train_data.ix[:,0:13]

    train_y = train_data.ix[:,13]

    model=tree_model.fit(X = predictors, y = train_y)

    test_feat = test_data.ix[:,0:13]

    test_y = test_data.ix[:,13]

    #Finding the class value of each row and the accuracy

    test_preds = model.predict(X=test_feat)

    test_score.append(i)

    test_score[i] = accuracy_score(test_y, test_preds)

print("Accuracy by acc_score", sum(accuracy)/len(accuracy))

这是什么意思?我需要一些帮助〜

2 个答案:

答案 0 :(得分:7)

int foo(int);
int bar(int, ...);

这是两个不同的功能。 foo的类型为int(int)bar的类型为int(int,...)

...是C风格的变种,不要与使用...的变异模板参数混淆。

template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };

std::decayboost::hana的优化版本的实施的这一部分。 typename TT部分是红色鲱鱼,是优化的一部分。

这是一个匹配R(A..., ...)的专精,其中A...R是从函数签名中推断出来的。

如果您将double(int, char, ...)作为第2个参数传递给此hana::details::decay,则R将为doubleA...将为int, char。并且...将“匹配C风格的varags”。

这个特殊的专业化的目的是将以C风格的varargs结尾的函数签名映射到指向相同签名的指针。因此,它会将double(int, char, ...)映射到double(*)(int, char, ...)

C style varargs与模板variardic参数不同。他们早于它。

答案 1 :(得分:6)

这种特化是将函数类型衰减到相应的指向函数类型的特殊化之一,它反映了函数lvalues衰减到函数指针prvalues的方式。

这个特殊的特化用于变量参数函数(那些参数列表以省略号结尾,以便它接受与任何参数不匹配的参数)。