gpt4 book ai didi

c++ - std::normal_distribution 的类型取决于模板

转载 作者:行者123 更新时间:2023-11-28 05:23:47 25 4
gpt4 key购买 nike

T 很少可以是 int,它会卡在:

std::normal_distribution<T> distribution(0.0, 0.1);

这将在我的函数的下一行中使用,我不希望所有依赖它的代码行都有一个 if/else。因此,我正在尝试这样做:

#include <random>

#define T int

int main ()
{
std::normal_distribution<((std::is_same<T, int>::value) ? (float) : (T))> distribution (0.0, 1$

return 0;
}

我收到了这些错误:

Georgioss-MacBook-Pro:Code gsamaras$ g++ -std=c++0x main.cpp 
main.cpp:7:69: error: expected expression
std::normal_distribution<((std::is_same<T, int>::value) ? (float) : (T))> distribution ...
^
main.cpp:7:74: error: expected expression
std::normal_distribution<((std::is_same<T, int>::value) ? (float) : (T))> distribution ...
^
main.cpp:7:77: error: C++ requires a type specifier for all declarations
std::normal_distribution<((std::is_same<T, int>::value) ? (float) : (T))> distribution ...
^
3 errors generated.

关于如何解决这个问题或替代方案的任何想法?

最佳答案

#include <random>
#include <type_traits>

template<class T>
struct X
{
using float_t = typename
std::conditional<std::is_floating_point<T>::value, T, double>::type;
std::normal_distribution<float_t> dist{0.0, 0.1};
};

int main() {
X<int> x;
X<float> y;
return 0;
}

关于c++ - std::normal_distribution 的类型取决于模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40951983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com