相关疑难解决方法(0)

将字符串文字作为参数传递给C++模板类

我想要一个在其构造函数中包含两个参数的类.第一个可以是int,double或float,所以<typename T>,第二个总是字符串文字"my string",所以我想const char * const.

任何人都可以给我一些可编译的代码,声明一个简单的类模板,并声明该类的对象?

谢谢

c++ templates

39
推荐指数
10
解决办法
6万
查看次数

"if constexpr()"与"if()"之间的区别

if constexpr()和之间有什么区别if()

我何时何地可以同时使用它们?

c++ if-statement constexpr c++17

21
推荐指数
2
解决办法
5551
查看次数

为容器中的不同字符串类型实现编译时"static-if"逻辑

我想编写一个函数模板,对一个字符串容器进行操作,例如a std::vector.

我想支持两者CStringstd::wstring使用相同的模板功能.

问题是,CStringwstring有不同的接口,例如获取a的"长度" CString,你调用GetLength()方法,而不是你调用的wstring size()length().

如果我们在C++中有一个"静态if"功能,我可以这样写:

template <typename ContainerOfStrings>
void DoSomething(const ContainerOfStrings& strings)
{
    for (const auto & s : strings)
    {
        static_if(strings::value_type is CString) 
        {
            // Use the CString interface
        }
        static_else_if(strings::value_type is wstring)
        {   
            // Use the wstring interface
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有一些模板编程技术可以使用当前可用的C++ 11/14工具实现这一目标?

PS
我知道可以DoSomething()vector<CString>和编写几个重载vector<wstring>,但这不是问题的关键.
此外,我希望这个函数模板适用于任何可以使用range-for循环进行迭代的容器.

c++ containers templates compile-time c++11

12
推荐指数
2
解决办法
4582
查看次数

使用条件运算符初始化引用变量

以下C++无效,因为引用变量需要初始值设定项:

int& a; // illegal
if (isfive) {
  a = 5;
} else {
  a = 4;
}
Run Code Online (Sandbox Code Playgroud)

但是,MSVC似乎认为这没关系:

int& a = isfive ? 5 : 4;
Run Code Online (Sandbox Code Playgroud)

这意味着MSVC实际上将条件运算符视为单个表达式,而不是将其扩展为if-else语句.

使用条件运算符初始化引用始终是有效的C++吗?

c++ reference ternary-operator

7
推荐指数
3
解决办法
6184
查看次数

标准if/else在编译时已知的条件?

我知道C++中的一些元编程技术可以在编译时计算常量.元函数中的大多数时间分支是通过三元运算符完成的,可以在编译时以与标准if/else相反的方式进行评估.

但是关于这种功能:

template <unsigned int N>
void f()
{
    if (N == 0) {
        // Some computations here
    } else if (N <= 42) {
        // Some computations here
    } else {
        // Some computations here
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器会做什么(假设-O3)?编译器知道f<0>()将始终在第一种情况下f<32>()分支,将始终在第二种情况下f<64>()分支,并且将始终在第三种情况下分支.

编译器会删除永远存在的分支false吗?它会直接分支到唯一有效的案例吗?

c++ optimization templates if-statement c++11

3
推荐指数
1
解决办法
868
查看次数