根据参数大小在编译时选择函数

时间:2016-04-14 18:46:00

标签: c++

有没有办法生成代码(在编译时),看起来有点像:

T Func(T t){
    if (sizeof(t) == 2){
        return X(t);
    }
    else if( sizeof(t) == 4){
        return Y(t);
    }
}

(其中T是int32或int16)

所以在运行时我可以打电话:

Func(_myInt)

代码只会编译为X(_myInt)Y(_myInt)

3 个答案:

答案 0 :(得分:7)

X Func(int32_t t) {
    return X(t);
}

Y Func(int16_t t) {
    return Y(t);
}

答案 1 :(得分:4)

通过标签调度:

template <typename T>
auto Func_impl(T t, std::integral_constant<std::size_t, 2>){
   return X(t);
}

template <typename T>
auto Func_impl(T t, std::integral_constant<std::size_t, 4>){
   return Y(t);
}

template <typename T>
auto Func(T t){
   return Func_impl(T, std::integral_constant<std::size_t, sizeof(T)>{});
}

答案 2 :(得分:0)

为了完整性,如果你只想在绝对大小上发送,还有enable_if:

<?php

$sql = (" SELECT * FROM result ");
$query = mysqli_query($db, $sql);

while ($row = mysqli_fetch_array($query)) {
    $row2 = $row['id']; // I added an = sign here.

    for($i=1;$i<=10;$i++) {
        if ($i<= $row2) {
            echo "<font color='red'><font size='50px'>".$i."</font></font>"."<br>";
            continue;
        } else {
            echo $i.'<br>';
        }
    }
}