【问题标题】:Using C++ Technical Report 1 (TR1) in VC++ 2010 [closed]在 VC++ 2010 中使用 C++ 技术报告 1 (TR1) [关闭]
【发布时间】:2010-09-09 19:19:18
【问题描述】:

如何在 Visual c++ 2010 中使用 C++ TR1 库?

【问题讨论】:

  • 请在投票结束前阅读我的回答和 TR1 引用。
  • 不,这是 StackOverflow。问题应该是可回答的问题,但有明显的例外(例如“主观”)。如果提问者提到他/她/它正在尝试使用的 TR1 的特定部分,这将真正有所帮助,以便特定答案(最好带有示例)可以给。
  • @Mike:你看了我的回答……你不明白什么? TR1 提供隐藏在目录或#define 后面的功能。如果这些都不适用,那就是答案。
  • 好了。现在是问题的形式。

标签: c++ tr1


【解决方案1】:

VS2010 内置了一些 C++0x 功能。 TR1 的一些特性,例如数学函数,没有包含在 TR1 的 Visual C++ 实现中。

boost has an implementation of TR1,您可以通过downloading boost获取。

要从 VS2010 禁用 C++0x/TR1 头文件并使用 boost 实现,请在 VS2010 项目的项目设置中定义 _HAS_CPP0X=0

【讨论】:

  • OP专门问怎么用VS2010的实现,是吗?
  • @Steve Townsend 是的,但我个人喜欢这样,并非所有答案都给出直接答案,而是以某种方式替代
  • @Steve:不,他说“如何在 Visual c++ 2010 中使用 [TR1]”,我认为大多数人会解释为“如何使用 TR1 的 an 实现 with vs2010”而不是“如何使用TR1 实现 vs2010”。
  • 很公平,谢谢 James/Andrey
【解决方案2】:

如果您想使用与 VS10 一起打包的 TR1 的实现,只需简单地 #include 所需的标头并开始运行即可。并非所有 TR1 都包含在 TR1 的 VS10 实现中。您可以找到 TR1 的哪些部分(以及整个 C++0x)包含在工厂提供的实现 here 中的列表,这里是一个简单的示例,说明如何在 VS10 中使用正则表达式,取自 @ 987654322@:

// std_tr1__regex__regex_search.cpp 
// compile with: /EHsc 
#include <regex> 
#include <iostream> 

int main() 
    { 
    const char *first = "abcd"; 
    const char *last = first + strlen(first); 
    std::cmatch mr; 
    std::regex rx("abc"); 
    std::regex_constants::match_flag_type fl = 
        std::regex_constants::match_default; 

    std::cout << "search(f, f+1, \"abc\") == " << std::boolalpha 
        << regex_search(first, first + 1, rx, fl) << std::endl; 

    std::cout << "search(f, l, \"abc\") == " << std::boolalpha 
        << regex_search(first, last, mr, rx) << std::endl; 
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl; 

    std::cout << "search(\"a\", \"abc\") == " << std::boolalpha 
        << regex_search("a", rx) << std::endl; 

    std::cout << "search(\"xabcd\", \"abc\") == " << std::boolalpha 
        << regex_search("xabcd", mr, rx) << std::endl; 
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl; 

    std::cout << "search(string, \"abc\") == " << std::boolalpha 
        << regex_search(std::string("a"), rx) << std::endl; 

    std::string str("abcabc"); 
    std::match_results<std::string::const_iterator> mr2; 
    std::cout << "search(string, \"abc\") == " << std::boolalpha 
        << regex_search(str, mr2, rx) << std::endl; 
    std::cout << "  matched: \"" << mr2.str() << "\"" << std::endl; 

    return (0); 
    } 

【讨论】:

    【解决方案3】:

    与 GCC 不同,VC2010 中的 TR1 标头不会隔离在 TR1/ 目录中。我不是通过使用 VC 知道这一点,而是因为有人告诉我 GCC 的实现以这种方式不寻常。

    N1836 1.3/4:

    建议使用默认未定义的宏来保护标准头文件中的附加声明,或者将所有扩展头文件(包括新头文件和具有非标准声明的标准头文件的并行版本)放在一个不属于默认搜索路径的单独目录。

    因此,您可能还需要添加#define。很遗憾,他们没有对此进行标准化!

    【讨论】:

    • “可能”?鉴于我们只是在谈论 VS2010,是否还有其他需要知道的事情来确定您是否需要说#define
    • @Mike:我对VS一无所知。我只是回答,因为问题即将结束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多